PHP:什么是empty()的替代品,其中字符串“0”不被视为空?

时间:2009-04-09 05:53:12

标签: php

  

可能重复:
  Fixing the PHP empty function

在PHP中,empty()是一个很好的快捷方式,因为它允许你检查变量是否定义而不是同时为空。

如果您不希望将“0”(作为字符串)视为空,但仍希望将false,null,0和“”视为空,您会使用什么?

也就是说,我只是想知道你是否有自己的捷径:

if (isset($myvariable) && $myvariable != "") ;// do something
if (isset($othervar  ) && $othervar   != "") ;// do something
if (isset($anothervar) && $anothervar != "") ;// do something
// and so on, and so on

我认为我不能为此定义辅助函数,因为变量可能未定义(因此无法作为参数传递)。

7 个答案:

答案 0 :(得分:28)

这应该做你想要的:

function notempty($var) {
    return ($var==="0"||$var);
}

编辑:我猜表只能在预览中使用,而不是在实际的答案提交中。因此,请参阅PHP type comparison tables以获取更多信息。

notempty("")       : false
notempty(null)     : false
notempty(undefined): false
notempty(array())  : false
notempty(false)    : false
notempty(true)     : true
notempty(1)        : true
notempty(0)        : false
notempty(-1)       : true
notempty("1")      : true
notempty("0")      : true
notempty("php")    : true

基本上,对于除“0”之外的所有值,notempty()与!empty()相同,为此返回 true

<小时/> 编辑:如果您使用的是 error_reporting(E_ALL),则无法按值将未定义的变量传递给自定义函数。正如mercator指出的那样,你应该总是使用 E_ALL 来符合最佳实践。他提供的This link(评论#11)讨论了为什么不应该为性能和可维护性/调试原因使用任何形式的错误抑制。

请参阅orlandu63的答案,了解如何将参数传递给自定义函数by reference

答案 1 :(得分:9)

function isempty(&$var) {
    return empty($var) || $var === '0';
}

关键是&运算符,它将变量传递给reference,如果它不存在则创建它。

答案 2 :(得分:3)

if ((isset($var) && $var === "0") || !empty($var))
{

}

这样,如果变量设置为“0”,则输入if-construct,或者设置变量AND not = null(“0”,null,false)

答案 3 :(得分:2)

if(isset($var) && ($var === '0' || !empty($var)))
{
}

答案 4 :(得分:1)

答案是,不可能缩短我已有的东西。

禁止通知或警告不是我想要做的事情,所以我总是需要在检查值之前检查是否为empty()或isset(),并且您无法检查某些内容是否为空()或函数中的isset()。

答案 5 :(得分:0)

function Void($var)
{
    if (empty($var) === true)
    {
        if (($var === 0) || ($var === '0'))
        {
            return false;
        }

        return true;
    }

    return false;
}

答案 6 :(得分:0)

if($ var!= null)