对于严格===
的比较,逻辑很简单:每个值实体只等于它自己,所以TRUE === TRUE
, "1" === "1"
, but"1" !== 1
等等。
当谈到==
比较时,不幸的是没有经验法则,也没有明确的逻辑。这可能是因为各种形式的运算符是由不同的程序员实现的,没有中央设计决策。我能做的最好的就是为您提供此图表以打印并粘贴在显示器上:
该图的关键是:当且仅当和是上图中由一条线直接连接的两种类型时,A == B
将是。例如,是因为和是直接相连的,而是因为没有线将两者连接起来。TRUE
A
B
array() == NULL
TRUE
array()
NULL
array() == 0
FALSE
用红色标记的线是棘手的(不明显的)等式。
我省略了每个实体都将等于它自己(例如"1" == "1"
等),但这应该很容易记住。
最后一点,我想解释一下为什么"php" == 0
is TRUE
(non empty, non number string is equal to 0
):因为 PHP"php"
在比较之前转换为 number ,并且由于它不是数字,所以它默认为0
并进行 test TRUE
。
有趣的事实:这种关系没有分区!如果允许传递闭包,您可以轻松地说True 是 False 和 False 是 True,用四个简单的 PHP 语句破坏了数千年的哲学:D