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