>  기사  >  백엔드 개발  >  php4에서 시뮬레이션된 클래스의 소멸자 예제 분석

php4에서 시뮬레이션된 클래스의 소멸자 예제 분석

黄舟
黄舟원래의
2017-07-02 10:25:471001검색

최근에 작업한 프로젝트는 PHP4를 기반으로 했습니다. 저는 PHP5에서 객체를 사용하는 데 익숙합니다. PHP4를 사용하면 필연적으로 많은 불편함을 겪게 됩니다.

공용, 정적, 비공개, 보호 키워드를 지원하지 않습니다. , 가장 우울한 것 예, 소멸자는 지원되지 않습니다:

이 기사에서는 PHP의 Register_shutdown_function을 사용하여 PHP4에서 클래스의 소멸자를 시뮬레이션합니다

우리는 생성자에 소멸자를 등록합니다.

class sample{
   var $identified;
   function sample($iden){
       $this->identified = $iden;
      register_shutdown_function(array(&$this, 'destructor')); //模拟析构函数
    }
   function destructor(){
     error_log("destructor executing, Iden is ". $this->identified);
     unset($this);
   }
}
 
 $sample = new sample("laruence");
 $sample2 = new sample("HuiXinchen");

이 스크립트를 실행합니다
닫는 함수를 등록할 때 $this 키워드를 사용했기 때문에 반대 변수를 덮어쓰더라도 소멸자는 여전히 올바르게 호출될 수 있습니다. 예:

class sample{
   var $identified;
   function sample($iden){
       $this->identified = $iden;
      register_shutdown_function(array(&$this, 'destructor')); //模拟析构函数
    }
   function destructor(){
     error_log("destructor executing, Iden is ". $this->identified);
     unset($this);
   }
}
 
 $sample = new sample("laruence");
 
 $sample = "laruence"; //覆盖对象变量

$sample을 덮어썼지만 이 스크립트를 실행하면 다음 코드에서도 소멸자가 여전히 올바르게 호출될 수 있음을 알 수 있습니다.

class sample{
   var $identified;
   function sample($iden){
       $this->identified = $iden;
      register_shutdown_function(array(&$this, 'destructor')); //模拟析构函数
    }
   function destructor(){
     error_log("destructor executing, Iden is ". $this->identified);
     unset($this);
   }
}
 
 $sample = new sample("laruence");
 unset($sample);

소멸자는 여전히 올바르게 호출될 수 있습니다.

위 내용은 php4에서 시뮬레이션된 클래스의 소멸자 예제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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