我会发一个问题,我希望管理员stackoverflow不要把它作为一个重复的主题,因为我找不到这样的事情的解释。
我们都知道,在类型杂耍之后,这种比较看起来像这样:
false == array() -> (bool) == false (bool) array() -> false == false -> true
到目前为止,没什么不寻常的。
问题是试图要求对这样的事情做出解释,但答案没有意义,然后看起来主题是重复的,但实际上它并不是一个重复的主题。
问题是php如何解释下面这个比较:
'' == array()
有些人说:
“对空字符串进行转换为数组”
结果是: (array)''== array() - > array('')== array() - >假
似乎是对的。
但是最大的问题在于:
'' == array('')
因为它不会返回true?如果通过某种理论:
'' == array('')
- >这应该返回true
'' == array('')
- > (array)'' == array('') -> array('') == array('')
但是返回了假。
你可以一劳永逸地解释这个问题吗?
答案 0 :(得分:2)
tl; dr在比较中没有进行施法:
在内部,比较是通过compare_function
完成的,当解析器看到==
运算符时会调用此对象。
在此函数内部,根据每个操作数的类型进行测试;字符串和数组的组合没有特定的行为,因此尝试进行数字转换here。
这两个操作数的尝试都失败了,因为空字符串不是数字而数组也不是。然后它执行另一个测试here以检查是否有任何操作数是数组或对象。如果是这样,它将返回-1或1,具体取决于匹配的操作数。
当然,the manual中也记录了这一点,以帮助那些不想破译源代码的人:)