为什么'0'不等于空



从我在数学中学到的知识:

每当a = b and b = c时,也是a = c

所以如果null == false and false == '0', then null == '0'

让我们在php

中尝试一下
<?php
echo (false == null); // true
echo (false == '0'); // true
echo (null == '0'); // false
?>

显然我的闪亮数学基础在这种情况下不适合,我不知道为什么?

编辑

我需要对内部发生的事情进行更多澄清?PHP是否将双方转换为布尔值?还是对比较没有什么?

a'real'(严格(php中的等效性为 ===。如果您使用它,您会喜欢您提到的过渡性属性。

但是==在PHP中不是确切的等效性。它首先采用转换为通用类型的操作数。如我们所见,使用false作为第一个操作数会导致第二个操作数降低到布尔值。但是,如果您比较对字符串的引用,则不会发生这种减少,这就是为什么将值视为不同的原因。当然,这种方法违反了过境属性。但是,同样,===是一个"真实"平等标志,而不是==

您可以将其视为此,null只是意味着值是"未定义"。但是" 0"将变量定义为整数,0是一个值!null并未被宣布为任何东西。因此是错误的。

所以定义的东西(" 0"(不能等于未定义的东西(" null"(。

编辑 - 请注意,某些语言确实将null设置为指定值,要么0如果作为整数,false作为bool等。但是其他语言不默认为任何东西。PHP可能不会默认为整数。

我认为您的问题是关于:PHP(与其他语言一样(可以将变量与灵活模式或严格模式进行比较。

如果您尝试此...(请注意三重===(

echo (false === null); // result = false
echo (false === '0'); // result = false
echo (null === '0'); // result = false

这意味着在严格模式下进行比较,这意味着比较价值和类型。您确实比较了灵活性,这不是很容易值得信赖,因为这可能会无法预测,除非您不需要严格。典型的灵活比较是

$myvar = null;
if($myvar == false)  ....

与...

相同
if(!$myvar) ...

所以,如果您真的想信任类型的比较,请使用Triple等于===

无论如何,我敢打赌,null =='0'是真的,但似乎是错误的。

相关内容

  • 没有找到相关文章

最新更新