检查变量是否有值且不为空

时间:2016-08-05 14:09:10

标签: php variables

我想检查数字变量是否有值(包括' 0' )并且不为空。空的意思是空(''),不是' 0'。

这真的是我用PHP做的最好吗?

if (isset($variable) && $variable !== '') { ... }

我想在没有为其编写功能的情况下进行一次检查...

4 个答案:

答案 0 :(得分:2)

您要检查的是字符串长度,而不是"空"。这可以使用strlen()轻松完成。

if (isset($variable) && strlen($variable) > 0) {
    // Do something
}

如果您想要将空格排除为无效,您也可以在其中添加trim()(通常建议)。

if (isset($variable) && strlen(trim($variable)) > 0 } {
    // ...
}

答案 1 :(得分:2)

是的,您的方式是最好的(最有效的)方式:

  • 确保变量已设置(因此您不会收到警告,检查未设置的变量)
  • 它不是空字符串''
    • 但是,可能是'0'0falsenull[]在php中都被视为空,但您希望考虑如您的OP
    • 所示非空
    • 你的!==将确保只比较字符串''(没有转换/转换)

strlen的使用也有效,但是如果你看一下生成的操作码,你会发现直接比较在计算上更有效3倍(假设所有操作都是相同的加权,如果像DO_FCALL这样的操作比基本IS_NOT_IDENTICAL检查需要更多的执行周期

!== ''版本字节码:

    IS_NOT_IDENTICAL                                     ~1      !0, ''

strlen() > 0版本字节码:

     SEND_VAR                                                 !0
     DO_FCALL                                      1  $1      'strlen'
     IS_SMALLER                                       ~2      $1, 0

答案 2 :(得分:2)

(答案已经过编辑。请参阅"三元操作"下面的其他内容。)

为什么要经历使用这一切的麻烦?

只需使用"非空" if(!empty($var)){...}

但是,如果你在GET数组中使用它,那么是;最好在条件语句中使用isset()empty()

  

我想检查变量是否有值(包括' 0')并且不为空

这对我来说是:

检查一个值是否有值且不为空(如您所写)并且代表包含0(零)

因此:

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

  

我想在没有为其编写功能的情况下进行一次检查...

然后使用三元运算符。

然而"没有功能" ......对不起,你不能。你仍然需要"某种类型的功能"。

关于"三元运算符" 我在上面提到过。您可以引用所谓的"嵌套三元运算"在这两个Q& A的Stack上:

这样你就不需要自定义功能了。

  • 旁注:到目前为止,我没有带走或试图取消(夏洛特)接受的答案(应该保持接受)。这只是实现(终极)目标的另一种方法。

答案 3 :(得分:2)

你能做的最好的事情就是制作你自己的自定义功能。关键是当您传递未定义的变量时,通过引用传递变量以不触发警告。在发布评论时,我会使用isset($variable) AND !empty($variable) AND !is_numeric($variable) AND $variable !== false行中的内容来涵盖所有案例。

您的自定义功能可能如下所示(改进版):

function is_blank(&$variable) {
    return (bool) !(isset($variable) AND (!empty($variable) OR is_numeric($variable) OR $variable === false));
}

https://3v4l.org/ZcCDu