最近,在做个人博客的时候,常对isset()和empty()何时使用与为何使用感到困惑,现就其区别做如下总结。
- 手册上对isset的定义:
(PHP 4, PHP 5, PHP 7)
isset — 检测变量是否设置,并且不是NULL
语法:
bool isset ( mixed $var
[, mixed $...
] )
返回值:
若变量存在且值不为NULL,则返回 TURE
若变量存在且其值为NULL,则返回 FALSE
若变量不存在则返回 FALSE
注意:
如果已经使用 unset()释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成NULL的变量,将返回FALSE。
同时要注意的是一个 NULL 字节("\0")并不等同于 PHP 的 NULL 常数。
通过下面的代码,来理解上面的说明:
<?php
echo '<b>未定义$var</b>';
echo '<br/>';
if(isset($var)){
echo '$var设置了'.'<br/>';
}
else
{
echo '$var没设置'.'<br/>'; // false
}
echo '**********************';
echo '<br/>';
echo '<b>$var是空字符串:$var = \' \'</b>';
$var = '';
echo '<br/>';
if(isset($var)){
echo '$var设置了'; // true
}
else
{
echo '$var没设置';
}
echo '<br/>';
echo '**********************';
echo '<br/>';
echo '<b>$var = 0</b>';
echo '<br/>';
$var = 0;
if(isset($var)){
echo '$var设置了'; // true
}
else
{
echo '$var没设置';
}
echo '<br/>';
echo '**********************';
echo '<br/>';
echo '<b>$var = NULL</b>';
echo '<br/>';
$var = null;
if(isset($var)){
echo '$var设置了';
}
else
{
echo '$var没设置'; // false
}
echo '<br/>';
echo '**********************';
echo '<br/>';
echo '<b>$var = false</b>';
echo '<br/>';
$var = false;
if(isset($var)){
echo '$var设置了'; // true
}
else
{
echo '$var没设置';
}
?>
预览结果:
根据显示结果可以看出:
当变量为空字符串、数值0和布尔值false时,isset全部返回true
当变量不存在和变量存在且值为NULL时,isset返回false
- 手册上对empty的定义:
(PHP 4, PHP 5, PHP 7)
empty — 检查一个变量是否为空
语法:
bool empty ( mixed $var
)
返回值:
当var
存在,并且是一个非空非零的值时返回 FALSE
否则返回 TRUE
.
以下的东西被认为是空的:
- "" (空字符串)
- 0 (作为整数的0)
- 0.0 (作为浮点数的0)
- "0" (作为字符串的0)
NULL
FALSE
- array() (一个空数组)
- $var; (一个声明了,但是没有值的变量)
代码解释:
<?php
echo '<b>未定义$var</b>';
echo '<br/>';
if(empty($var)){
echo '$var值为空'.'<br/>'; // true
}
else
{
echo '$var不为空'.'<br/>';
}
echo '**********************';
echo '<br/>';
echo '<b>$var是空字符串:$var = \' \'</b>';
$var = '';
echo '<br/>';
if(empty($var)){
echo '$var值为空'; // true
}
else
{
echo '$var不为空';
}
echo '<br/>';
echo '**********************';
echo '<br/>';
echo '<b>$var = 0</b>';
echo '<br/>';
$var = 0;
if(empty($var)){
echo '$var值为空'; // true
}
else
{
echo '$var不为空';
}
echo '<br/>';
echo '**********************';
echo '<br/>';
echo '<b>$var = NULL</b>';
echo '<br/>';
$var = null;
if(empty($var)){
echo '$var值为空'; // true
}
else
{
echo '$var不为空';
}
echo '<br/>';
echo '**********************';
echo '<br/>';
echo '<b>$var = false</b>';
echo '<br/>';
$var = false;
if(empty($var)){
echo '$var值为空'; // true
}
else
{
echo '$var不为空';
}
echo '<br/>';
echo '**********************';
echo '<br/>';
echo '<b>$var = array()</b>';
echo '<br/>';
$var = array();
if(empty($var)){
echo '$var值为空'; // true
}
else
{
echo '$var不为空';
}
?>
预览结果:
根据显示结果可以看出:
若变量不存在则返回 true
若变量存在且其值为 " "、0、"0"、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 true
若变量存在且值不为 " "、0、"0"、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 false
顾名思义,empty() 判断一个变量是否为“空”,isset() 判断一个变量是否已经设置。两者十分相似。
两者的区别在于:empty会检测变量是否为空、为零。当一个变量值为0,empty() 认为这个变量同等于空,即相当于没有设置。 而isset() 认为这个变量被设置了。
这意味着,我们在使用变量处理函数时,当该变量可能出现0的值,使用 empty() 要小心,这个时候用 isset 取代它更明智一些。
empty()和isset()的处理对象无外乎未定义变量,0,空字符串。
如果变量为0,则empty()会返回true,isset()会返回true;
如果变量为空字符串,则empty()会返回true,isset()会返回true;
如果变量未定义,则empty()会返回true,isset()会返回false;
- 根据上面的总结,又发现了在php中:
空字符串(' ')、false、NULL和0是值相等而类型不相等。
代码如下:
<?php
$a = null;
$b = false;
echo $a==$b ? "相等" : "不相等"; // true
$c = "";
$d = 0;
echo $c==$d ? "相等" : "不相等"; // true
$e = 0;
$f = '0';
echo $e===$f? "相等" : "不相等"; // false
echo $e==$f ? "相等" : "不相等"; // true
$g=0;
$h=false;
echo $g==$h ? "相等" : "不相等"; // true
function eq($v1,$v2) {
if($v1 == $v2&&gettype($v1) ==gettype($v2)) {
return 1;
} else {
return 0;
}
}
echo eq($a, $b);
?>
预览结果: