PHP-当零等于“0”时;a”;


PHP - when zero equals "a"

我最近遇到了一个困扰我的错误……追溯到以下(简化的)statmement,它提供了一个真实的示例

function test_it($team)
{  echo (($team=="a") ? "Yep it is!" : "No Way");
}

所以,如果我执行test_it(0);,我得到的结果是"是的!"??

这句话的逻辑看起来很好,但很明显,为了得到正确的结果,我需要做"==="。。。。

有人能解释为什么会这样吗?只是为了帮助我理解为什么/将来应该避免什么。

这是因为a的字符串/字符,即"a"并通过0。

===操作员执行"类型安全比较"

此处的解释和问题

这是因为类型杂耍会使"a"变成一个整数进行比较。所以实际上这就是正在运行的:

if (0 == (int)"a") 

当然,(int)"a"将评估为0,您可以在这里阅读更多关于类型杂耍的信息。

检查此链接。

使用==可以执行松散比较。根据链接中的表,0(整数)和"something"(字符串)之间的这种类型的比较将产生TRUE

==运算符只是检查左值和右值是否相等。但是,===运算符(注意额外的"=")实际上会检查左值和右值是否相等,也会检查它们是否属于相同的变量类型(比如它们是否都是布尔值、int值等)

现在做一个echo (int)"a";,你会得到一个0,它对任何字符串都有效。

在PHP中,任何不以数值开头的字符串都是==到0。例如,这里有一个具有各种比较的样本,以及由此产生的echo:

$team = 0;
echo (($team=="a") ? "Yep it is!" : "No Way");    // Yep it is!
echo (($team=="abc") ? "Yep it is!" : "No Way");  // Yep it is!
echo (($team=="a really long string") ? "Yep it is!" : "No Way");  // Yep it is!

显然,这实际上不是一个bug,请在此处阅读更多信息>https://bugs.php.net/bug.php?id=44999.