PHP - 字符串与数组比较

时间:2014-01-03 07:35:35

标签: php

我会发一个问题,我希望管理员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('')

但是返回了假。

你可以一劳永逸地解释这个问题吗?

1 个答案:

答案 0 :(得分:2)

tl; dr在比较中没有进行施法:

在内部,比较是通过compare_function完成的,当解析器看到==运算符时会调用此对象。

在此函数内部,根据每个操作数的类型进行测试;字符串和数组的组合没有特定的行为,因此尝试进行数字转换here

这两个操作数的尝试都失败了,因为空字符串不是数字而数组也不是。然后它执行另一个测试here以检查是否有任何操作数是数组或对象。如果是这样,它将返回-1或1,具体取决于匹配的操作数。

当然,the manual中也记录了这一点,以帮助那些不想破译源代码的人:)