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