我最近遇到了一个让我困惑的错误.... 将其追溯到以下(简化的)语句,它提供了一个真实的示例
function test_it($team)
{ echo (($team=="a") ? "Yep it is!" : "No Way");
}
所以,如果我执行,test_it(0);
我会得到结果“是的,它是!” ??
该语句的逻辑看起来不错,但显然要获得正确的结果,我需要使其“===”....
谁能解释为什么会这样?只是为了帮助我理解为什么/我将来应该避免什么。
检查此链接。
与==
您进行松散比较。根据链接中的表格,0
(整数)和"something"
(字符串)之间的这种比较将导致TRUE
.
在 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。
== 运算符只是检查左右值是否相等。但是,=== 运算符(注意额外的“=”)实际上检查左右值是否相等,并检查它们是否属于相同的变量类型(比如它们是否都是布尔值、整数, ETC。)
现在做 aecho (int)"a";
你会得到一个 0 它对任何字符串都有效。