我对simplexml评估有一个非常尴尬和具体的问题。
代码:
$simplexml = simplexml_load_string($xmlstring);
var_dump($simplexml);
var_dump($simplexml == false); //this comparison
var_dump($ simplexml)返回simplexml的实际结构,但对于这个特定的simplexml,比较返回'true',由于我的合同,我无法显示结构。
我确定这是非常具体的问题'因为我尝试了其他XML字符串,并且比较返回'false'。
$simplexml = simplexml_load_string('<a><b>test</b></a>');
var_dump($simplexml); //returns the actual structure
var_dump($simplexml == false); //returns false
我使用'==='运算符解决了这个问题,但我不满意只是让它工作。我想了解为什么'=='运算符返回true。
我读到了两个运算符和SimpleXMLElement,在我看来它应该为两个运算符返回'false'。
在成功解析的SimpleXMLElement和布尔值'false'之间进行比较以返回'true'的可能原因是什么?
答案 0 :(得分:2)
我这是使用boolean casting (bool)
$simplexml = simplexml_load_string('<a><b>test</b></a>');
var_dump($simplexml); //returns the actual structure
var_dump((bool) $simplexml); // Retuns true
var_dump((bool) $simplexml == false); //returns false
var_dump((bool) $simplexml === false); //returns false
演示:http://codepad.viper-7.com/xZtuNG
===
比较值和类型...除了对象,其中===
仅当两个操作数实际上是同一个对象时才为真!对于对象,==
比较(每个属性的)值和类型,这是===
对其他每种类型的作用。
编辑1
答案 1 :(得分:2)
var_dump($simplexml == false); //returns false
这是预期的行为,通过“松散”数据类型的数据比较来解释。在PHP中,NULL,零和布尔值FALSE被视为“Falsy”值;其他一切都被认为是“Truthy”。在括号内,PHP执行表达式的评估。在这种情况下,PHP会评估命名变量OBJECT和布尔值FALSE的比较。它们不一样,因此比较的返回值为FALSE,这就是* var_dump()*打印的内容。
您可以在if()语句中使用它。例如:
$simplexml = SimpleXML_Load_String('<a><b>test</b></a>');
if ($simplexml) { /* process the object */ }
else { /* process the failure to load the XML */ }
答案 2 :(得分:1)
看看这里: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
它表示从空标签创建的SimpleXML对象评估为false。也许那是怎么回事?