PHP 中的非逻辑逻辑
Unlogical Logic in PHP
考虑一个 return 为整数或假的函数:
我可以用以下方法检查错误:
if(false == my_function()) {
echo "do something";
}
但是如果我想否定逻辑:
if(true == my_function()) {
echo "do something";
}
第二个示例在所有情况下都评估为 true - 即使 returned 为 false。那怎么可能呢。我如何检查是否为假 return.
true
不可能等于 "falsy"(参见 PHP boolean documentation)。无论如何,您应该始终使用 (not) identical (!==/===) 而不是 (not) equal (!=/== ) 运算符并仅比较 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 ...
真不假。
<?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 是假的。
考虑一个 return 为整数或假的函数:
我可以用以下方法检查错误:
if(false == my_function()) {
echo "do something";
}
但是如果我想否定逻辑:
if(true == my_function()) {
echo "do something";
}
第二个示例在所有情况下都评估为 true - 即使 returned 为 false。那怎么可能呢。我如何检查是否为假 return.
true
不可能等于 "falsy"(参见 PHP boolean documentation)。无论如何,您应该始终使用 (not) identical (!==/===) 而不是 (not) equal (!=/== ) 运算符并仅比较 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 ...
真不假。
<?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 是假的。