题
empty()
函数时为空。如果您希望数字或字符串值为0,则可能会出现意外结果。我如何“修复”?它只返回true对空对象,数组,字符串等? 解决方案
这对我不起作用。
if (empty($variable) && '0' != $variable) {
// Do something
}
我改为使用:
if (empty($variable) && strlen($variable) == 0) {
// Do something
}
其他提示
由于您描述的原因,我很少使用 empty()
。它将合法价值与空虚混为一谈。也许是因为我在SQL中做了很多工作,但我更喜欢用 NULL
来表示没有值。
PHP有一个函数 is_null()
,它测试变量或表达式是 NULL
。
$foo = 0;
if (is_null($foo)) print "integer 0 is null!\n";
else print "integer 0 foo is not null!\n";
$foo = "0";
if (is_null($foo)) print "string '0' is null!\n";
else print "string '0' is not null!\n";
$foo = "";
if (is_null($foo)) print "string '' is null!\n";
else print "string '' is not null!\n";
$foo = false;
if (is_null($foo)) print "boolean false is null!\n";
else print "boolean false is not null!\n";
您也可以使用完全相等的运算符 ===
进行类似的测试:
if ($foo === null) print "foo is null!\n";
如果 $ foo
是 NULL
,则为真,但如果它是 false
,零,"" 代码>等等。
" 0" 始终被视为虚假(在PHP中,它确实很有意义(不是我会在这里争论)。如果你想将零评估为真,请使用 strlen($ value)
。
"定影"是一种观点。另一种方法是假设它不是“破碎”,并学会按照故意设计的方式使用它。
考虑到你描述的问题,最好的办法是收紧你的代码,这样变量就不会被置于不确定的类型状态。否则,您将需要使用gettype()测试数据类型。
我总是添加到我的代码库
function is_blank($value) {
return empty($value) && !is_numeric($value);
}
并使用它而不是empty()。它解决了将零(int,float或string)保持为非空的问题。
请参阅 http://www.php.net/manual/en /function.empty.php#103756 已于2011年5月添加。
一般来说,您希望使用三等于运算符来确定值何时为真或空。这更具体,结果始终完全按预期返回。
创建一个单独的函数来执行您可以在一行代码中执行的操作,但使用不同的运算符似乎过于复杂,并添加了额外的混淆。
此外,许多程序员倾向于使用0或空字符串来表示不存在的值,但使用空值来表示任何值(无论类型)更正确(我觉得更好的做法)真的不存在。
我用它来检测空虚:
'' --> true
'0' --> false
0 --> false
功能:
function is_empty_or_zero($str) {
return (is_null($str) || ($str === ''));
}
我创建了一个 IsEmpty()
一个简洁的快速功能。
function IsEmpty($mData) {
return is_int($mData) ? false :
is_string($mData) ? $mData=="" :
empty($mData);
}
您正尝试将 empty()
用于不适合的事情。就个人而言,我认为它的行为来自PHP中较旧的编程范例,它可能已经退役。
相反,请使您的检查更加明确。而不是检查该值是否有用,检查它是否有用。例如,如果你想要一个数组,检查它是一个数组( is_array()
),而不是检查它是否是一个字符串。
此外,您可以依赖所有 $ _ POST
和 $ _ GET
变量都是字符串的事实,因此您可以与“"”进行比较,或者检查 strlen()== 0
。
if ( is_int($val) || !empty($val) ) {;}
我使用 ord
功能检查传递的值是空的或不是。
/*
* SPACE is not empty - Please do trim before using this function for your own purpose
* var_dump(is_having_value(0)); // true
var_dump(is_having_value(0000)); // true
var_dump(is_having_value(" 0")); // true
var_dump(is_having_value("")); // false
var_dump(is_having_value(" ")); // true
var_dump(is_having_value('\t')); // true
var_dump(is_having_value('')); // false
var_dump(is_having_value('o')); // true
var_dump(is_having_value('O')); // true
var_dump(is_having_value('0')); //true
var_dump(is_having_value(null)); //false
var_dump(is_having_value()); //false
*/
function is_having_value($val = null) {
if (is_array($val) || is_object($val)):
$logic_empty = empty($val);
return !$logic_empty;
else:
$ascii = ord($val);
if ($ascii == 48 || $ascii = 0 || $ascii == 32):
return true;
else:
$logic_empty = empty($val);
return !$logic_empty;
endif;
endif;
}
解决此问题的最有效方法是测试变量是否为假,例如
if (!$variable_name) {echo $variable_name;}
如果变量为空或null,则无关紧要,当置于if条件时,它都等于false。