Php isset()会触发吗?为什么?
答案似乎是否定的,但为什么?只有当您尝试访问不存在的属性时,才会调用神奇函数\uuu get。检查属性是否存在与检索属性不同。,因为它使用get检查而不是检索属性Php isset()会触发吗?为什么?,php,isset,Php,Isset,答案似乎是否定的,但为什么?只有当您尝试访问不存在的属性时,才会调用神奇函数\uuu get。检查属性是否存在与检索属性不同。,因为它使用get检查而不是检索属性 调用isset是一个更好的选择,因为没有关于什么是空的标准。在类的上下文中,null可能是一个可接受的值。您还可以有一个类,如果该成员不存在,它将返回一个新的空对象,这将破坏isset($myObj->item),因为在这种情况下,它将始终返回true。否,当您试图确定是否设置了属性时,不应触发\u get:测试属性是否设置与尝试获取
调用isset是一个更好的选择,因为没有关于什么是空的标准。在类的上下文中,null可能是一个可接受的值。您还可以有一个类,如果该成员不存在,它将返回一个新的空对象,这将破坏isset($myObj->item),因为在这种情况下,它将始终返回true。否,当您试图确定是否设置了属性时,不应触发
\u get
:测试属性是否设置与尝试获取其值不同
使用isset
触发\uu isset
魔术方法
见:
- 及
- 事实并非如此;您可以改用_uisset。这一点已经说明了。在我的示例中,似乎我没有定义“isset”?似乎你确实没有——但是,如果你已经定义了它,它应该被调用;;无论定义与否,都不会改变在测试是否设置了属性时未调用
\uu get
的任何情况。
class a {
function __get($property){...}
}
$obj = new a();
var_dump(isset($obj->newproperty));
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")