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

时间:2011-08-25 13:55:49

标签: php

  

可能重复:
  Why check both isset() and !empty()

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

检查 - 这个变量是否设置?如果设置 - 我检查 - 它是否为空?

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

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

6 个答案:

答案 0 :(得分:134)

这取决于你要找的东西,如果你只是想看看它是否为空,只需使用empty,因为它会检查它是否也被设置,如果你想知道是否设置了某些东西使用isset

Empty检查变量是否已设置,如果是,则将其检查为null,“”,0等

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

使用empty时,以下内容被视为空:

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

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


正如评论中所提到的,缺少警告对于empty()

也很重要

PHP Manual

  

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

关于isset

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 
 {...}

答案 1 :(得分:11)

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

如果您不知道变量是否存在,则需要使用isset。因为你在第一行宣布它,你知道它存在,因此你不需要,不,不应该使用isset

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

如果你只想测试一个应该存在的变量真实性,那么if ($var)就足够了。

答案 2 :(得分:6)

你可以使用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。否则它似乎是空的()可以单独使用。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

以下是4种可能性的isset()empty()的输出:未声明,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) } 

您会注意到所有'isset'结果与结果相反,除了案例$b=false。评估为false的所有值(除非值为非值但为非值)将在isset测试时返回true,在使用'empty'测试时返回false。

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

答案 5 :(得分:-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,它会导致错误,检查其首次设置是否有助于消除一些令人头痛的问题。