>  기사  >  백엔드 개발  >  PHP에서 변수를 삭제하는 방법

PHP에서 변수를 삭제하는 방법

王林
王林원래의
2019-09-21 11:49:214444검색

PHP에서 변수를 삭제하는 방법

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

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

2. 암시적 파괴, PHP는 스크립트 언어이므로 마지막 코드 줄이 실행될 때 적용된 모든 메모리를 해제해야 합니다.

위의 두 가지 파괴 방법 중에서 세 가지 방법을 요약할 수 있습니다. 즉,

1, unset()

2, $varname=null

3, destructor __destruct()

예를 들면 다음과 같습니다.

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에는 여전히 값이 있음을 설명합니다.

2.$varname=null, 변수 이름은 여전히 ​​존재하지만 메모리 값은 삭제됩니다. 그렇다면 참조별 전달의 경우는 어떨까요? 예:

  <?php
        $a = 1;
        $b = &$a;
        $a=null;
        var_dump($a);
        var_dump($b);
输出的结果是:
NULL NULL

그래서 $varname=null, 변수 이름과 메모리 포인터는 여전히 존재하지만 메모리에 있는 값은 완전히 삭제됩니다.

3 위의 예에서 볼 수 있듯이 PHP가 마지막 코드 조각을 실행할 때 소멸자 __destruct()가 시작되지만 이러한 이해는 충분히 정확하지 않습니다. 예를 들어

<?php 
class Human{       
     public  $name = &#39;开始&#39;;        
     public function __destruct(){                
     echo &#39;结束&#39;;        
     }}
     $a = new Human;
     echo $a->name;
     unset($a);   //销毁函数 
     $a = new Human; 
     echo &#39;***********************&#39;;

输出的结果是:

开始结束***************************结束
class Human{       
     public  $name = &#39;开始&#39;;        
     public function __destruct(){                
        echo &#39;结束&#39;;        
     }}
     $a = new Human;
     $b = $a;
     echo $a->name;
     unset($a);   //销毁函数 
     $a = new Human; 
     echo &#39;***************************&#39;;

结果是:

开始***************************结束结束

위 결과는 다음과 같습니다. 코드 마지막 줄이 실행될 때 시작되지 않고 객체가 소멸될 때 자동으로 실행됩니다. human() 함수에도 unset()이 있는데 소멸자 __destruct()가 마지막에 계속 실행되는 이유는 참조로 전달할 때 객체의 메모리가 취소되지 않고 객체가 완전히 소멸되지 않기 때문입니다.

결론은: 수동 소멸이 없으면 코드 실행이 완료된 후 메모리가 해제될 때 시스템이 자동으로 소멸자 __destruct()를 실행합니다. 객체가 소멸되면 소멸자가 자동으로 실행됩니다. .

추천 튜토리얼:

PHP 비디오 튜토리얼

위 내용은 PHP에서 변수를 삭제하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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