__isset()对象自己的魔术函数

时间:2011-10-14 12:23:55

标签: php magic-methods

我知道你可以做到这一点

class Object
{
    private $ar;

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

然后可用于执行以下操作

$obj = new Object();
if (isset($obj->name)) { /* ... */ }

但是有办法做到这一点

$obj = new Object();
if (isset($obj)) { /* .... */ }

我可以使用$obj魔术方法控制__isset()状态在其自身对象上的返回。

3 个答案:

答案 0 :(得分:2)

您只能定义一个新的全局函数myIsset()或类似的东西来执行此操作。

function myIsset($obj = NULL)
{
    ...
}

使用$obj检查变量isset时,PHP不会与变量可能引用的对象进行交互。

答案 1 :(得分:2)

你不能,因为它没有任何意义(至少不是isset()意图使用的方式)。所以isset($obj)总是正确的,只要它指向某个对象而不是NULL / undefined。

答案 2 :(得分:0)

魔术方法__isset不打算以这种方式使用。

根据PHP manual

“__ isset()是通过在不可访问的属性上调用isset()或empty()来触发的。”