isset()和empty()-使用什么


105

您能否帮助我改善编码风格?:)在某些任务中,我需要检查-变量为空还是包含某些内容。为了解决此任务,我通常执行以下操作。

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

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

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


isset($ var)||为空 $ var == false
zloctb 2015年

2
在我看来,empty()是PHP的可怕发展。由于它将任何形式的“ 0”视为“空”,因此您可能会陷入陷阱,从而花费大量调试时间。我会说:不惜一切代价避免自己动手,而是自己编写逻辑
John

Answers:


143

这取决于您要查找的内容,如果您只是想查看它是否为空,那么只需使用empty它即可检查它是否也已设置,是否想知道是否已设置了某些内容isset

Empty 检查是否设置了变量,是否为null,“”,0等

Isset 只是检查是否已设置,可能不是空

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

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

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


正如评论中提到的,对于empty(),缺少警告也很重要

PHP手册

empty()与(boolean)var相反,不同之处在于未设置变量时不生成警告

关于isset

PHP手册

如果测试已设置为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不会抛出错误。
2011年

3
您将忽略最大的要点empty:当测试的变量不存在时,它不会发出警告。这就是此功能的重点,否则与相同== false
deceze

1
因此,手册中的“未设置变量时不会发出警告”这一事实使我感到困惑。没有警告并不意味着我不会在下面的代码中遇到麻烦。现在对我来说很清楚。多谢!
德米特里·别拉文采夫

“ isset只是检查它是否已设置,它仍然可能为null”。事实并非如此:isset在null(和现有)上,变量的求值为false
netcoder 2011年

12

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

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

同样适用于empty,只是empty还结合了对值真实性的检查。empty等于!isset($var) || !$var!empty等于isset($var) && $varisset($var) && $var == true

如果你只是想测试一个变量应该存在感实性if ($var)是完全足够的,重点突出。


这个解释好得多了。如果我们能像这样对所有其他情况进行比较!empty is equivalent to isset($var) && $var,那就太好了。感谢@deceze
Vir

6

您可以只使用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 as true because $var is set
if (isset($var)) {
    echo '$var is set even though it is empty';
}
?>

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


否决投票的解释?他不是在询问它们是否相同,而是在询问是否要清空之前是否需要检查isset。
克里斯(Chris)

我没有投票,但是“如果想知道它不为null,请使用isset”是不正确的:$var = null; isset( $var ) == true
JJJ

从PHP5 / 4手册开始:isset()-“确定是否设置了变量并且不为NULL。” us.php.net/manual/zh/function.isset.php
克里斯(Chris)

2

以下是这4种可能性的输出,isset()以及empty()这4种可能性的输出:未声明,null,false和true。

$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) } 

您会注意到,除了 case 之外,所有“ isset”结果都与“ empty”结果相反$b=false。评估为false的所有值(除null以外不是值而是非值)在被by测试时将返回true,isset而由'empty'测试时将返回false。

因此,isset()当您担心变量的存在时使用。和使用empty,当你正在测试真或假。如果实际类型的空虚问题,使用is_null===0===false===''


1

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


-3
$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如果未像上面那样定义变量,则会添加该变量,这会导致错误,请检查至少是否对其进行了第一个设置,这将有助于消除一些麻烦。


7
strlen 零?我想看那串。
deceze

@deceze只是一个粗糙的例子:) OK use = 0 not <0
Akos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.