php中isset()和empty()的区别

  最近,在做个人博客的时候,常对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);
?>

  预览结果:

  

 

 

  

转载于:https://www.cnblogs.com/AimeeCodeWorld/p/7044026.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值