PHP魔术方法\uuuunset()在调用unset函数时不起作用
我不明白为什么PHP魔术方法\uuuunset()在调用unset函数时不起作用,php,magic-methods,unset,Php,Magic Methods,Unset,我不明白为什么\u unset()不起作用 class myclass { public $name = array(); public function __set($arraykey, $value){ $this->name[$arraykey] = $value; } public function __isset($argu){ return isset($this->name[$argu]); }
\u 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()
函数时,就会自动调用Magic方法\uu unset()
,并取消变量的设置
在上面的代码中,我使用unset,但它不调用
\uu unset()
。为什么?在理解魔法方法\uuuuu unset()
时,我是否遗漏了一些东西?魔法方法\uuuu set
、\uu get
、\uu isset
仅在访问不可访问的属性时才会被调用。这意味着私有属性、受保护属性(在子类之外访问)或尚未创建的属性
调用内部变量$\u name
而不是$name
,或将$name
设置为private
或protected
而不是public
将解决您的问题
注意:
只有当属性或函数需要从扩展类中访问时,才应该使用受保护的属性或函数-不要仅仅因为这样就使用它们
__在无法访问的属性上使用unset()时,将调用unset()
因此,它只能在不可访问(即私有
和受保护
)道具上有效