3

我最近遇到了一个让我困惑的错误.... 将其追溯到以下(简化的)语句,它提供了一个真实的示例

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

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

该语句的逻辑看起来不错,但显然要获得正确的结果,我需要使其“===”....

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

4

5 回答 5

3

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

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

解释和问题在这里

于 2013-06-27T08:18:22.077 回答
2

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

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

当然(int)"a"会评估为0,您可以在此处阅读有关类型杂耍的更多信息。

于 2013-06-27T08:18:49.180 回答
0

检查此链接

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

于 2013-06-27T08:20:25.893 回答
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

于 2013-06-27T08:21:07.510 回答
0

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

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

于 2013-06-27T08:25:31.523 回答