3
$isClient = 0;
if($isClient == 0) echo "is client 0\n";
if($isClient == "n") echo "is client n\n";
if($isClient == "y") echo "is client y\n";

考虑到上面的代码,它输出以下内容

is client 0
is client n
is client y

我一定在这里遗漏了什么!为什么0等于“n”和“y”???

上述代码的链接用于测试

4

3 回答 3

6

在这里,您正在执行松散比较(注意:严格比较是在三个等号的帮助下完成的:) ===,在这种情况下,一个字符串的计算结果为零,因为==它是左关联的,这意味着,如果第一个操作数是整数,则第二个操作数也被类型转换为整数(因此"n"被解释为0)。这就是 PHP 的工作方式。

于 2013-04-17T21:12:50.000 回答
4

由于$isClient"n"属于不同的数据类型,因此必须将它们转换为通用数据类型才能进行比较。

(int)"y"并且(int)"n"两者都评估为0,因此您的等式成立。如果要进行严格比较,请使用三等号。它还检查数据类型:

<?php

$isClient = 0;
if($isClient === 0) echo "is client 0\n";
if($isClient === "n") echo "is client n\n";
if($isClient === "y") echo "is client y\n";

?>

这会生成正确的输出:

is client 0
于 2013-04-17T21:13:44.837 回答
3

在 PHP 中,当要比较值时,需要使用三个等号 ( ===),因为:

如关于表达式的部分所述[见下文],表达式被评估为其布尔值。如果表达式计算结果为 TRUE,PHP 将执行语句,如果计算结果为 FALSE - 它会忽略它。有关哪些值评估为 FALSE 的更多信息,请参阅“转换为布尔值”部分。(来源)

最后值得一提的是表达式的真值。在很多事件中,主要是在条件执行和循环中,你对表达式的具体值不感兴趣,而只关心它的含义是 TRUE 还是 FALSE。常量 TRUE 和 FALSE(不区分大小写)是两个可能的布尔值。必要时,表达式会自动转换为布尔值。有关如何进行的详细信息,请参阅有关类型转换的部分。 (来源)

所以你的代码必须修改如下:

$isClient = 0;
if($isClient === 0) echo "is client 0\n";
if($isClient === "n") echo "is client n\n";
if($isClient === "y") echo "is client y\n";

输出

is client 0
于 2013-04-17T21:16:40.453 回答