我最近有一个令我困惑的错误......追溯到下面(简化)的状态,这提供了一个真实的例子
function test_it($team)
{ echo (($team=="a") ? "Yep it is!" : "No Way");
}
所以,如果我执行test_it(0);
,我得到的结果是“是的!” ??
声明的逻辑看起来很好,但显然要得到一个正确的结果我需要把它变成“===”....
任何人都可以解释为什么会这样吗?只是为了帮助我理解为什么/将来应该避免的事情。
答案 0 :(得分:3)
答案 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,它对任何字符串都有效。