php - 用simplexml_load_string($xml_str)返回的对象访问不存在的属性,empty为true
本文介绍了php - 用simplexml_load_string($xml_str)返回的对象访问不存在的属性,empty为true的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
$xml_str = <<<EOT
<xml>
<fee_type><![CDATA[CNY]]></fee_type>
<return_code><![CDATA[SUCCESS]]></return_code>
<trade_type><![CDATA[NATIVE]]></trade_type>
</xml>
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()
就自动被跳过了。
这篇关于php - 用simplexml_load_string($xml_str)返回的对象访问不存在的属性,empty为true的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文