PHP具有评估(int)0和(字符串)“0”的习惯。使用 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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top