对于严格===的比较,逻辑很简单:每个值实体只等于它自己,所以TRUE === TRUE, "1" === "1", but"1" !== 1等等。
当谈到==比较时,不幸的是没有经验法则,也没有明确的逻辑。这可能是因为各种形式的运算符是由不同的程序员实现的,没有中央设计决策。我能做的最好的就是为您提供此图表以打印并粘贴在显示器上:

该图的关键是:当且仅当和是上图中由一条线直接连接的两种类型时,A == B将是。例如,是因为和是直接相连的,而是因为没有线将两者连接起来。TRUEABarray() == NULLTRUEarray()NULLarray() == 0FALSE
用红色标记的线是棘手的(不明显的)等式。
我省略了每个实体都将等于它自己(例如"1" == "1"等),但这应该很容易记住。
最后一点,我想解释一下为什么"php" == 0is TRUE(non empty, non number string is equal to 0):因为 PHP"php"在比较之前转换为 number ,并且由于它不是数字,所以它默认为0并进行 test TRUE。
有趣的事实:这种关系没有分区!如果允许传递闭包,您可以轻松地说True 是 False 和 False 是 True,用四个简单的 PHP 语句破坏了数千年的哲学:D