最近做的一個專案是基於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中文網其他相關文章!