考虑一个返回Integer或false的函数:
我可以通过以下方式检查错误:
if(false == my_function()) {
echo "do something";
}
但是,如果我想否定逻辑:
if(true == my_function()) {
echo "do something";
}
第二个示例在所有情况下都评估为true - 即使返回false也是如此。这怎么可能是遥远的。我该如何检查非假回报。
答案 0 :(得分:2)
真的不是假的。
<?php
function return_false()
{
return false;
}
var_dump(true == return_false());
输出:
bool(false)
此外:
function return_one()
{
return 1;
}
function return_zero()
{
return 0;
}
var_dump(true == return_one());
var_dump(true == return_zero());
输出:
bool(true)
bool(false)
正整数是真实的。 0是假的。
答案 1 :(得分:1)
true
不可能等于“虚假”的东西(见PHP boolean documentation)。无论如何,你应该总是使用(不是)相同的(!== / ===)而不是(不)相等(!= / ==)运算符并且只比较相同php中的数据类型,以避免一些奇怪的隐式类型转换。
例如
// DO
if ($number > 0) {...}
if ($number !== 0) {...}
// DON'T
if ($number) {...}
if ($number == true) {...}
if ($number != 0) {...}
// DO
if (count($array) > 0) {...}
if (!empty($array)) {...}
// DON'T
if ($array) {...}
if (count($array)) {...}
// DO
if (strlen($string) > 0) {...}
if (!empty($string)) {...}
// DON'T
if ($string) {...}
// and so on ...