我知道PHP的比较运算符不是100%,因为自动类型声明。
我做了一些测试并找到了这段代码
<?php
function foo($answer) {
if ($answer > 10) {
return true;
} else {
return $answer;
}
}
if (foo(11)) {
echo "11 is bigger than 10<br />";
}
if (foo(9)) {
echo "9 is bigger than 10<br />";
}
?>
输出为:
11 大于 109 大于 10
有人可以解释一下代码在此比较中失败的位置和原因。
因为return $answer
在你的两个测试用例中都是真实的。
这计算结果为:
if (11) { ...
if (9) { ...
函数foo()
总是返回一些值。在这种情况下,布尔型和 int 型。只要确保在比较返回值时更严格。
<?php
function foo($answer) {
if ($answer > 10) {
return true;
} else {
return $answer;
}
}
if (foo(11) === true) {
// This returned TRUE
echo "11 is bigger than 10<br />";
}
if ( is_int(foo(9)) === true ) {
//This returned int
echo "9 is bigger than 10<br />";
}
?>
你可以
这样做,
<?php
function foo($answer) {
return ($answer > 10);
}
if (foo(11)) {
echo "11 is bigger than 10<br />";
}
if (foo(9)) {
echo "9 is bigger than 10<br />";
}
?>
你比较它的方式是错误的,$answer是非零值,在PHP中,当你在条件下使用它时,每个非零值都被认为是真的。
function foo($answer) {
if ($answer > 10) {
return true;
} else {
return false;
}
}