就在前几天,我正在创建一个从远程服务器中提取XML文件的函数,一旦成功检索,它将返回一个SimpleXMLElement对象,如果无法获取该信息,则返回false网络故障。
一种常见但懒惰的做法是使用if检查来检查函数响应,以确定变量中是否存在某些内容。 可能下面的代码将试图更好地解释我想说的是什么
[25.0, 193.0, 281.75, 87.5, 80.5, 449.75, 306.25, 281.75, 87.5, 675.5,986.125, 306.25, 281.75]
有人可以解释为什么比较运算符的结果是布尔值(true)?
答案 0 :(得分:0)
var_dump($xmlElement == false)
我们比较$ xmlElement和值False。因此,如果$ xmlElement为False,则比较将为True(false == false)。 PHP需要将$ xmlElement转换为boolean。
针对布尔值的PHP文档: http://php.net/manual/en/language.types.boolean.php
转换为布尔值时,以下值被视为FALSE:
- 布尔值FALSE本身
- 整数0(零)
- 浮点数0.0(零)
- 空字符串,字符串" 0"
- 包含零元素的数组
- 一个零成员变量的对象(仅限PHP 4)
- 特殊类型NULL(包括未设置的变量)
- 从空标记创建的SimpleXML对象
答案 1 :(得分:0)
我做了一些研究(http://php.net/manual/en/class.simplexmlelement.php)。
这句话是第一条评论:
进一步发表先前的评论并推动重点:
使SimpleXMLElement难以处理的原因是它感觉并且>行为像一个对象,但实际上是一个系统RESOURCE(特别是一个> libxml资源)。
这就是为什么你不能将SimpleXMLElement存储到$ _SESSION或对节点值执行>直接比较操作而不首先将它们转换为>某种类型的对象。 $ _SESSION期望存储'对象'并且比较>运算符期望比较2'对象'而SimpleXMLElements不是>对象。
当您回显或打印节点的值时,PHP会将值(资源)>转换为字符串对象。这肯定是一个节省时间,但可以欺骗你>认为你的SimpleXMLElement是一个对象。
希望这有助于澄清
显然你的对象是一个资源。我的猜测是这是一个PHP错误......
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 ?