【问题标题】:isset() and empty() - what to useisset() 和 empty() - 使用什么
【发布时间】:2011-11-03 17:35:00
【问题描述】:

你能帮我改进我的编码风格吗?:) 在某些任务中我需要检查 - 变量是空的还是包含某些东西。为了解决这个任务,我通常会做以下事情。

检查 - 是否设置了此变量?如果已设置 - 我检查 - 它是否为空?

<?php
    $var = '23';
    if (isset($var)&&!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

我有一个问题 - 我应该在 empty() 之前使用 isset() - 有必要吗?蒂亚!

【问题讨论】:

  • 空是 !isset($var) || $var == 假
  • 在我看来 empty() 是 PHP 的一个可怕的发展。由于它将任何形式的“0”视为“空”,您可能会陷入错误的陷阱,从而花费大量的调试时间。我想说:不惜一切代价避免,自己写逻辑

标签: php


【解决方案1】:

这取决于您要查找的内容,如果您只是想查看它是否为空,请使用empty,因为它也会检查它是否已设置,如果您想知道是否设置了某些内容,请使用 @ 987654325@.

Empty 检查变量是否已设置,如果已设置,则检查其是否为 null、""、0 等

Isset 只是检查它是否设置,它可能是任何不为空的东西

使用empty,以下内容被认为是空的:

  • “”(空字符串)
  • 0(0为整数)
  • 0.0(0 作为浮点数)
  • “0”(0作为字符串)
  • 错误
  • array()(一个空数组)
  • 变量 $var; (声明的变量,但在类中没有值)

来自http://php.net/manual/en/function.empty.php


正如在 cmets 中提到的那样,empty() 缺少警告也很重要

PHP Manual

empty() 与 (boolean) var 相反,除了没有 warning 是 变量未设置时生成

关于伊塞特

PHP Manual

如果测试已设置为 NULL 的变量,isset() 将返回 FALSE


你的代码可以这样:

<?php
    $var = '23';
    if (!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

例如:

$var = "";

if(empty($var)) // true because "" is considered empty
 {...}
if(isset($var)) //true because var is set 
 {...}

if(empty($otherVar)) //true because $otherVar is null
 {...}
if(isset($otherVar)) //false because $otherVar is not set 
 {...}

【讨论】:

  • 意思是——在上面的代码中我检查变量是否设置了两次?:)
  • 只检查是否为空,如果不是这样,php不会抛出错误。
  • 您忽略了empty 的最大点:当测试变量不存在时,它不会抛出警告。这就是这个函数的全部意义,否则它与== false 相同。
  • 因此,手册中“未设置变量时不会生成警告”的事实让我感到困惑。没有警告不代表我不会在下面的代码中遇到麻烦。现在对我来说很清楚了。非常感谢!
  • "isset 只是检查它是否已设置,它仍然可能为 null" 这不是真的:在 null(和现有)变量上的 isset 将评估为 @987654334 @.
【解决方案2】:

在您的特定情况下:if ($var)

如果不知道变量是否存在,则需要使用isset。由于您在第一行声明了它,因此您知道它存在,因此您不需要,不,不应该使用isset

empty 也是如此,只是 empty 还结合了对值的真实性的检查。 empty 等价于!isset($var) || !$var!empty 等价于isset($var) &amp;&amp; $var,或isset($var) &amp;&amp; $var == true

如果您只想测试一个应该存在的变量以保证真实性if ($var) 就完全足够了。

【讨论】:

  • 这个解释好多了。如果我们对像!empty is equivalent to isset($var) &amp;&amp; $var 这样的所有其他情况进行比较,那就太棒了。谢谢@deceze
【解决方案3】:

您可以只使用 empty() - 如 the documentation 中所见,如果变量没有值,它将返回 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 as true because $var is set
if (isset($var)) {
    echo '$var is set even though it is empty';
}
?>

如果你只是想知道它是否不为 NULL,你可以使用 isset。否则,empty() 似乎可以单独使用。

【讨论】:

  • 否决票的解释?他不是在问它们是否相同,而是在问是否需要在检查空之前检查 isset。
  • 我没有投反对票,但“如果你想知道它不为空,请使用 isset”是不正确的:$var = null; isset( $var ) == true
  • 来自 PHP5/4 手册:isset() - “确定变量是否已设置且不为 NULL。” us.php.net/manual/en/function.isset.php
【解决方案4】:

这里是 isset()empty() 的输出,有 4 种可能性:未声明、空、假和真。

$a=null;
$b=false;
$c=true;

var_dump(array(isset($z1),isset($a),isset($b),isset($c)),true); //$z1 previously undeclared
var_dump(array(empty($z2),empty($a),empty($b),empty($c)),true); //$z2 previously undeclared

//array(4) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(true) [3]=> bool(true) } 
//array(4) { [0]=> bool(true) [1]=> bool(true) [2]=> bool(true) [3]=> bool(false) } 

您会注意到对于案例$b=false,所有“isset”结果都与“空”结果相反除了。在isset 测试时,所有评估为 false 的值(除了 null,它不是值而是非值)将返回 true,而在 'empty' 测试时返回 false。

因此,当您担心变量的存在时,请使用isset()。在测试真假时使用empty。如果实际的空虚类型很重要,请使用is_null===0===false===''

【讨论】:

    【解决方案5】:

    如果未设置 var,则 Empty 返回 true。但是即使 var 不为空,isset 也会返回 true。

    【讨论】:

    • 这是一个有点误导和不完整的答案。
    【解决方案6】:
    $var = 'abcdef';
    if(isset($var))
    {
       if (strlen($var) > 0);
       {
          //do something, string length greater than zero
       }
       else
       {
         //do something else, string length 0 or less
       }
    }
    

    这是一个简单的例子。希望对您有所帮助。

    编辑:添加了isset,如果没有像上面那样定义变量,它会导致错误,检查它的第一个设置是否至少有助于消除一些麻烦。

    【讨论】:

    • strlen 低于零?我想看看那个字符串。
    • @deceze 只是一个粗略的例子 :) OK 使用 =0 而不是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2011-06-01
    • 2010-12-29
    • 1970-01-01
    相关资源
    最近更新 更多