最近做的一個項目是基於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);
解構函式還是可以被正確調用.