分析下empty和isset的用法(有坑)

2016年12月17日

首先,无意的一个操作,发我发现了他们的稍微区别:我们先看下文档怎么说?

慢慢道来:细看下:empty()

empty   检查一个变量是否为空

说明

bool empty ( mixed $var )

如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,””、0、”0″、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。

除了当变量没有置值时不产生警告之外,empty() 是 (boolean) var 的反义词.

举个栗子:  empty() 与 isset() 的一个简单比较。
<?php
$var = 0;

// 结果为 true,因为 $var 为空
if (empty($var)) {
echo ‘$var is either 0 or not set at all’;
}

// 结果为 false,因为 $var 已设置
if (!isset($var)) {
echo ‘$var is not set at all’;
}
?>

注意:

1. empty() 只检测变量,检测任何非变量的东西都将导致解析错误。换句话说,后边的语句将不会起作用: empty(addslashes($name))。

2.因为是一个语言构造器而不是一个函数,不能被 可变函数 调用。


 

再看下:isset()

isset   检测变量是否设置

bool isset ( mixed $var [, mixed $… ] )

检测变量是否设置,并且不是 NULL。

如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个 NULL 字节(”\0″)并不等同于 PHP 的 NULL 常数。

 

<?php

$var = ”;

// 结果为 TRUE,所以后边的文本将被打印出来。
if (isset($var)) {
echo “This var is set so I will print.”;
}

// 在后边的例子中,我们将使用 var_dump 输出 isset() 的返回值。
// the return value of isset().

$a = “test”;
$b = “anothertest”;

var_dump(isset($a)); // TRUE
var_dump(isset($a, $b)); // TRUE

unset ($a);

var_dump(isset($a)); // FALSE
var_dump(isset($a, $b)); // FALSE

$foo = NULL;
var_dump(isset($foo)); // FALSE

?>

 

先说说他们的共同点:

1.都可以判定一个变量是否为空;

2.都返回boolean类型,即true或false。

不同点就是一个坑了,注意下:

他们之间最大的区别就是对于0的判断,若用empty判断会认为是空,用isset则认为不为空,举个例子:

  1. <?php

var $a=0;

//empty($a)返回true

if(empty($a)){

echo “判断结果是空”

}

//isset($a)返回true

if(isset($a)){

echo “判断结果不是空”

}

?>

No Comments

发表评论