跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

用simplexml_load_string($xml_str)返回的对象访问不存在的属性,empty为true

$xml_str = << EOT; $obj = simplexml_load_string($xml_str); var_dump($obj->game); if(empty($obj->game)) { echo '空的'; } else { echo "不空"; }
game属性是不存在的,但var_dump却有结果,什么原因? 回复内容:
$xml_str = << EOT; $obj = simplexml_load_string($xml_str); var_dump($obj->game); if(empty($obj->game)) { echo '空的'; } else { echo "不空"; }
game属性是不存在的,但var_dump却有结果,什么原因? 虽然
game
属性不存在,但是直接获取这个属性时,会调用
SimpleXMLElement
的魔术方法
__get()
,这个方法返回了一个空对象,并被
var_dump
打印了出来。 但是对象在
empty()
判断时应该为真呀,为什么这里是假呢? 因为
empty()
并不等于直接的布尔判断,而是
empty($var) === isset($var) && $var
,所以这里会先调用
SimpleXMLElement
的魔术方法
__isset()
,而
__isset()
返回了这个属性不存在,后面的
__get()
就自动被跳过了。 因为
simplexmlelement
内部实现了
setter
和
getter
, 就像魔术方法
__set()
和
__get()
,

相关文章