首頁  >  文章  >  後端開發  >  php4中模擬類別的析構函數實例分析

php4中模擬類別的析構函數實例分析

黄舟
黄舟原創
2017-07-02 10:25:471031瀏覽

最近做的一個專案是基於PHP4的, 習慣了PHP5的面對物件,面對PHP4,難免會有很多不爽:

#不支持public, static, private, protected關鍵字, 最鬱悶的是,不支持析構函數:

本文就將藉助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