>백엔드 개발 >PHP 문제 >PHP에서 변수를 파괴하는 2가지 방법은 무엇입니까?

PHP에서 변수를 파괴하는 2가지 방법은 무엇입니까?

青灯夜游
青灯夜游원래의
2021-09-24 19:44:573089검색

PHP에서 변수를 삭제하는 두 가지 방법: 1. "unset($varname)" 구문으로 unset() 함수를 사용합니다. 2. "$varname 구문으로 지정된 변수에 값을 "NULL"로 할당합니다. =널;".

PHP에서 변수를 파괴하는 2가지 방법은 무엇입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

PHP에서 변수나 객체의 소멸은 명시적 소멸과 암시적 소멸로 나눌 수 있습니다:

1 . 명시적 소멸, 객체가 참조되지 않으면 소멸되므로 설정을 해제하거나 NULL을 할당할 수 있습니다.

2 암시적 소멸, PHP는 코드의 마지막 줄이 실행될 때 모든 요청한 메모리가 삭제됩니다.

따라서 변수를 삭제하는 두 가지 방법:

  • unset()unset()

  • $varname=null

举例来说:

class Human { 
  public $name = '张三'; 
  public $gender = null; 
  public function __destruct() { 
      echo &#39;死了!<br />&#39;; 
  } 
} 
$a = new Human(); 
$b = $c = $d = $a;
unset($a);
$d=null;


echo &#39;<hr />&#39;;
var_dump($a);
echo &#39;<hr />&#39;;
var_dump($b);
echo &#39;<hr />&#39;;
var_dump($c);
echo &#39;<hr />&#39;;
var_dump($d);

结果如下:

Notice: Undefined variable: a in /Library/WebServer/Documents/test.php on line 42
NULL
object(Human)#1 (2) { ["name"]=> string(6) "张三" ["gender"]=> NULL }
object(Human)#1 (2) { ["name"]=> string(6) "张三" ["gender"]=> NULL }
NULL 死了!

首先我们要知道,在PHP中,变量名是存储在内存栈中,它是指向堆中具体内存的地址,通过变量名查找堆中的内存; 因此我们可以得出结论:

<?php
$a = 1;
$b = &$a;
unset($a);
var_dump($a); 
var_dump($b);

结果是:

Notice: Undefined variable: a in E:\amp\apache\htdocs\index.php on line 5
NULL int(1)

所以unset()并没有真正销毁变量中内存值,仅仅是切断了变量与内存之间的关系,并将变量名也给干掉了,但内存只要还被引用着就不会被释放; 而在PHP中对象的传值默认是引用传值,这也解释了Human类中,$a被unset()了,但是$b =$c = $d 一样有值。

$varname=null,变量名依然存在,但是内存值却被干掉了。那么在引用传值的情况下又是如何呢?举例:

<?php        
$a = 1;        
$b = &$a;        
$a=null;        
var_dump($a);        
var_dump($b);

输出的结果是:

NULL NULL

所以,$varname=null

$varname=null li>

예: 🎜🎜rrreee🎜결과는 다음과 같습니다. 🎜rrreee🎜먼저 PHP에서는 변수 이름이 메모리 스택에 저장된다는 점을 알아야 합니다. 이는 힙에 있는 특정 메모리의 주소를 가리킵니다. 따라서 변수 이름을 통해 힙에서 메모리를 찾으면 다음과 같은 결론을 내릴 수 있습니다. 🎜rrreee🎜결과는 다음과 같습니다. 🎜🎜rrreee🎜따라서 unset()은 실제로 메모리를 파괴하지 않습니다. 변수에 값이 있으면 변수와 메모리 사이의 관계가 끊어지고 변수 이름도 제거되지만 PHP에서 참조되는 한 메모리는 해제되지 않습니다. 객체의 값은 다음과 같습니다. 기본적으로 참조로 전달됩니다. 이는 Human 클래스에서 $a가 unset( )이지만 $b =$c = $d에는 여전히 값이 있음을 설명합니다. 🎜🎜$varname=null, 변수 이름은 여전히 ​​존재하지만 메모리 값은 삭제됩니다. 그렇다면 참조별 전달의 경우는 어떨까요? 예: 🎜rrreee🎜출력 결과는 다음과 같습니다. 🎜rrreee🎜그래서 $varname=null, 변수 이름과 메모리 포인터는 여전히 존재하지만 메모리의 값은 완전히 삭제됩니다. 🎜🎜추천 학습: "🎜PHP 비디오 튜토리얼🎜"🎜

위 내용은 PHP에서 변수를 파괴하는 2가지 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.