PHP - 当零等于“a”时

时间:2013-06-27 08:15:05

标签: php equality

我最近有一个令我困惑的错误......追溯到下面(简化)的状态,这提供了一个真实的例子

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

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

声明的逻辑看起来很好,但显然要得到一个正确的结果我需要把它变成“===”....

任何人都可以解释为什么会这样吗?只是为了帮助我理解为什么/将来应该避免的事情。

5 个答案:

答案 0 :(得分:3)

它是因为a的字符串/ char,即“a”并且经过0。

===运算符执行'类型安全比较'

Explanation and question here

答案 1 :(得分:2)

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

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

当然(int)"a"将评估为0,您可以阅读有关type juggling here的更多信息。

答案 2 :(得分:0)

检查this link

使用==执行宽松比较。根据链接中的表格,0(整数)和"something"(字符串)之间的这种比较将导致TRUE

答案 3 :(得分: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!

显然,它实际上并不是一个错误,请在此处详细了解> https://bugs.php.net/bug.php?id=44999

答案 4 :(得分:0)

==运算符只是检查左右值是否相等。但是,===运算符(注意额外的“=”)实际检查左边和右边的值是否相等,并检查它们是否属于相同的变量类型(比如它们是否都是布尔值,整数)等等。)

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