【问题标题】:Shorthand for isset and !empty [duplicate]isset 和 !empty 的简写 [重复]
【发布时间】:2011-11-30 22:57:42
【问题描述】:

愚蠢的问题,我知道,但是如果我不知道是否设置了变量$var,我应该使用

isset($var) && !empty($var)

检查它是否有任何值,或者是

!empty($var) 够吗?如果第二种情况$var为null,会不会有问题?

【问题讨论】:

  • 为什么不直接查看php手册php.net/manual/en/function.empty.php
  • 按照这个标准,StackOverflow 中不会有任何问题,对吧?
  • 克里斯特说得有道理。手册指出empty() is the opposite of (boolean) var, except that no warning is generated when the variable is not set. 您可以由此得出结论, 使用isset() 是可以的。不过,我并不反对您的问题,因为其他人可能不会建立这种联系。
  • 哦,我不知道它在手册中如此明确。我认为只有在某些情况下使用空就足够了。无论如何,谢谢大家的回答!

标签: php variables null


【解决方案1】:

issetempty 都是语言结构。并且empty() 在内部首先进行isset 检查,然后否定它,或者也检查布尔上下文中等于FALSE 的值。

所以是的,!empty() 就足够了。

【讨论】:

  • 错误,如果 $var 设置为 0,那么它被设置,但它被认为是空的。
  • @kylex。 mario 是正确的,特别是因为 op 还在检查变量是否为空。如果他只想知道变量是否已设置,那么是的,他应该使用 isset()。
  • $a=0; 然后var_dump(isset($a) && !empty($a));var_dump(!empty($a)); 都会说false。未定义的变量也是如此。
  • 那么我们是否将 0 视为非值?这个问题很难说。
  • 关键是这里的否定。 empty 会认为 0 是假的。但既然它查询!empty,那就没关系了。
【解决方案2】:

是的,您可以删除isset()

empty()(boolean) var相反,只是不设置变量时不会产生警告

您可以通过以下代码看到这一点:

error_reporting(E_ALL);

var_dump(empty($var));
bool(true)

(注意缺少未定义变量警告)

【讨论】:

    【解决方案3】:

    您应该使用 isset(),因为如果您的 $var 为 0,!empty() 将返回 false。

    <?php
    $var = 0;
    
    // Evaluates to true because $var is empty
    if (empty($var)) {
        echo '$var is either 0, empty, or not set at all';
    }
    
    //Evaluates false because $var is empty
    if(!empty($var)){
    
    }
    
    // Evaluates as true because $var is set
    if (isset($var)) {
        echo '$var is set even though it is empty';
    }
    ?>
    

    【讨论】:

    【解决方案4】:

    如果你使用empty(),我认为你可以完全放弃isset(),因为empty()也会检查是否首先设置变量

    毕竟,使用

    if (!empty($var)) {
        //isset and not empty
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 2017-10-20
      • 2011-11-03
      • 2010-12-29
      相关资源
      最近更新 更多