成功解析SimpleXMLElement比较为'false'返回'true'

时间:2012-04-12 20:11:01

标签: php xml comparison simplexml

我对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'的可能原因是什么?

3 个答案:

答案 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

查看类似https://bugs.php.net/bug.php?id=54547的最新错误

答案 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。也许那是怎么回事?