【发布时间】:2014-11-30 18:40:45
【问题描述】:
由于类型松散,PHP 必须将两个比较变量转换为相同类型,如果它们还没有。这个比较的幕后发生了什么:
$v = "" == 0;
它返回true。如果第一个变量的类型内部强制转换为第二个变量的类型,我可以理解:
$v = (int)"" === 0;
但如果是这样,逆向比较应该会失败:
$w = 0 == "";
因为
(string)0 = "0"
显然不等于""。
但它也返回true。
使用 JavaScript 也可以观察到相同的行为。
所以现在我问自己:那里发生了什么?!对我来说唯一的解释是这两个变量都被转换为布尔值。但在这种情况下,["X"] == "X" 应该返回 true,但显然不是。那么,假设 "" 等于 0 有什么魔力?
【问题讨论】:
-
我知道如何使用
===,但我只是想知道,对于这样的事情,PHP 遵循哪种算法。您的回答似乎是错误的,因为[] == ""返回 false,尽管两个参数都是empty()。 -
我猜这就是 PHP 的设计方式。
标签: javascript php