Php 比较运算符行为不端
就在前几天,我正在制作一个函数,该函数将从远程服务器提取一个XML文件,在成功检索后,它将返回一个SimpleXMLElement对象,或者如果由于网络故障无法获取该信息,则返回false 一种常见但懒惰的做法是使用if检查来检查函数响应,以确保变量中是否有内容。 下面的代码可能会更好地解释我想说的话Php 比较运算符行为不端,php,Php,就在前几天,我正在制作一个函数,该函数将从远程服务器提取一个XML文件,在成功检索后,它将返回一个SimpleXMLElement对象,或者如果由于网络故障无法获取该信息,则返回false 一种常见但懒惰的做法是使用if检查来检查函数响应,以确保变量中是否有内容。 下面的代码可能会更好地解释我想说的话 <?php $xmlString = "<?xml version='1.0' standalone='yes'?><root><node>A<
<?php
$xmlString = "<?xml version='1.0' standalone='yes'?><root><node>A</node></root>";
$xmlElement = new SimpleXMLElement($xmlString);
var_dump($xmlElement);
//Shows an xml element that is not empty
var_dump((bool)$xmlElement);
//Returns true
if($xmlElement)
{
//Executions comes inside
echo "i`m true";
}
var_dump($xmlElement == false);
//Strangely this is also true
?>
有人能解释为什么比较运算符的结果是布尔值(true)
var_dump($xmlElement == false)
我们比较$xmlElement和值False。因此,如果$xmlElement为False,则比较结果将为True(False==False)。PHP需要将$xmlElement转换为布尔值
适用于布尔人的PHP文档:
转换为布尔值时,以下值被视为FALSE:
- 布尔值本身是假的
- 整数0(零)
- 浮动0.0(零)
- 空字符串和字符串“0”
- 零元素数组
- 具有零成员变量的对象(仅限PHP 4)
- 特殊类型NULL(包括未设置的变量)
- 从空标记创建的SimpleXML对象
var_dump((bool) $xmlElement) => bool(True)
var_dump($xmlElement == false) => bool(True) //No reason
var_dump((bool) $xmlElement == false) => bool(False) //Why is behavior different ?
我不认为它是重复的,元素不是空的。更奇怪的是,将元素强制转换为bool会导致
true
:你是对的@jeroen。。奇怪的行为..实际上我尝试了var_dump((bool)$xmlement==false)并且它工作了…不是我的dv,但是你需要使用英语。对此很抱歉…你应该尝试一个var_dump((bool)$xmlement)代码>只是为了好玩:-)所以你说,如果在我们的例子中var_dump((bool)$xmlement)=>bool(true)不是空的,那么将资源类型转换为布尔值将为true,但是在这个语句中,var_dump($xmlement==false)当它尝试执行相同的操作时,它会转换为false?我猜$xmlElement的隐式转换没有正确执行,可能是因为它不是一个真正的对象,而是一个ressource。。。