2010-02-21 104 views

回答

19

因为它检查__isset而不是使用__get检索它。

这是一个好得多的选项来调用__isset,因为什么是空的没有标准。也许在类的上下文中null是一个可接受的值。你也可以有一个类,如果该成员不存在,它返回一个新的空对象,这将破坏isset($myObj->item),因为在那种情况下,它总是返回true。

0

仅当您尝试访问不存在的属性时,才会调用魔术函数__get。检查属性是否存在与检索属性不同。

1

不,__get当您试图确定是否设置属性时不应触发:测试属性是否设置与尝试获取其值不同。

使用isset触发__isset魔法。

参见:

+0

似乎我没有在我的例子中定义__isset? – ORM 2010-02-21 18:55:07

+0

似乎你确实没有 - 但是,如果你已经定义了它,它应该被称为;;并且定义或不定义不会在您测试某个属性是否设置时不会改变关于'__get'的任何内容。 – 2010-02-21 18:56:47

2

这是完全;你可以使用__isset来代替。这是布局here

0
Class A{ 
    public function __get($key){ 
     ... 
    } 
    public function __set($key,$name){ 
     ... 
    } 
    public function __unset($key){ 
     ... 
    } 
    public function __isset($key){ 
     ... 
    } 
} 
$obj = new A(); 
$get = $obj->newproperty;//$obj->__get("newproperty") 
$obj->newproperty = "X";//$obj->__set("newproperty","X") 
$bool = isset($obj->newproperty);//$obj->__isset("newproperty") 
unset($obj->newproperty);//$obj->__unset("newproperty") 
相关问题