PHP 변수나 객체의 소멸은 명시적 소멸과 암시적 소멸로 나눌 수 있습니다.
1. 명시적 소멸, 객체가 참조되지 않으면 소멸되므로 설정을 해제하거나 NULL을 할당할 수 있습니다. ;
2. 암시적 파괴, PHP는 스크립트 언어이므로 마지막 코드 줄이 실행될 때 적용된 모든 메모리를 해제해야 합니다.
위의 두 가지 파괴 방법 중에서 세 가지 방법을 요약할 수 있습니다. 즉,
1, unset()
2, $varname=null
3, destructor __destruct()
예를 들면 다음과 같습니다.
class Human { public $name = '张三'; public $gender = null; public function __destruct() { echo '死了!<br />'; } } $a = new Human(); $b = $c = $d = $a; unset($a); $d=null; echo '<hr />'; var_dump($a); echo '<hr />'; var_dump($b); echo '<hr />'; var_dump($c); echo '<hr />'; 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)
2.$varname=null, 변수 이름은 여전히 존재하지만 메모리 값은 삭제됩니다. 그렇다면 참조별 전달의 경우는 어떨까요? 예:
<?php $a = 1; $b = &$a; $a=null; var_dump($a); var_dump($b);
输出的结果是: NULL NULL
3 위의 예에서 볼 수 있듯이 PHP가 마지막 코드 조각을 실행할 때 소멸자 __destruct()가 시작되지만 이러한 이해는 충분히 정확하지 않습니다. 예를 들어
<?php class Human{ public $name = '开始'; public function __destruct(){ echo '结束'; }} $a = new Human; echo $a->name; unset($a); //销毁函数 $a = new Human; echo '***********************'; 输出的结果是: 开始结束***************************结束
class Human{ public $name = '开始'; public function __destruct(){ echo '结束'; }} $a = new Human; $b = $a; echo $a->name; unset($a); //销毁函数 $a = new Human; echo '***************************'; 结果是: 开始***************************结束结束
결론은: 수동 소멸이 없으면 코드 실행이 완료된 후 메모리가 해제될 때 시스템이 자동으로 소멸자 __destruct()를 실행합니다. 객체가 소멸되면 소멸자가 자동으로 실행됩니다. .
추천 튜토리얼:위 내용은 PHP에서 변수를 삭제하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!