2013-05-21 17 views
2

我不明白爲什麼__unset()不起作用。PHP Magic Method __unset()在調用未設置的函數時不起作用

class myclass { 
    public $name = array(); 

    public function __set($arraykey, $value){ 
     $this->name[$arraykey] = $value; 
    } 

    public function __isset($argu){ 
     return isset($this->name[$argu]); 
    } 

    public function __unset($argu){ 
     echo "Working: Unset $this->name[$argu]"; 
     unset($this->name[$argu]); 
    } 
} 

$obj = new myclass; 
$obj->name = 'Arfan Haider'; 

var_dump(isset($obj->name)); 

unset($obj->name); 

我看,每當unset()函數被調用,那麼魔術方法__unset()自動被調用,並取消設置變量。

在上面的代碼中,我使用未設置,但它不叫__unset()。爲什麼?我在理解魔術方法__unset()時錯過了什麼?

回答

5

的魔術方法__set__get__isset__unset只訪問人跡罕至屬性時被調用。這意味着要麼私有屬性,受保護的屬性(在子類之外訪問)或尚未創建的屬性。

呼喚你的內部變量$_name而不是$name,或設置$nameprivateprotected代替public將解決您的問題。

注意

時,他們需要從延伸類訪問時,才應使用protected性能或功能 - 不使用它,只是因爲。當未設置()是在難以接近性質使用

4

__unset()被調用。 (source)

因此它只能對不可見的(私人,受保護的)道具有效。