【问题标题】:PHP Magic Method __unset() does not work on calling unset functionPHP Magic Method __unset() 在调用 unset 函数时不起作用
【发布时间】:2013-05-16 07:07:38
【问题描述】:

我不明白为什么__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()。为什么?我在理解魔法方法__unset() 时遗漏了什么吗?

【问题讨论】:

    标签: php magic-methods unset


    【解决方案1】:

    __unset() 在 inaccessible 属性上使用 unset() 时被调用。 (source)

    因此它只能对不可访问的(即privateprotected)道具有效。

    【讨论】:

      【解决方案2】:

      魔术方法__set__get__isset__unset 仅在访问不可访问 属性时被调用。这意味着私有属性、受保护属性(在子类之外访问)或尚未创建的属性。

      调用您的内部变量$_name 而不是$name,或将$name 设置为privateprotected 而不是public 将解决您的问题。

      注意

      您应该只在需要从扩展类访问protected 属性或函数时使用它们 - 不要仅仅因为它而使用它。

      【讨论】:

        猜你喜欢
        • 2019-11-27
        • 2013-04-16
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2014-08-17
        • 1970-01-01
        相关资源
        最近更新 更多