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()

因此,它只能在不可访问(即
私有
受保护
)道具上有效