isset()  常用来判定变量是否存在  但是当变量赋值为NUll时候,返回值一样是FALSE  而实际上变量是存在的,与实际情况不符,判定错误。

  empty() 用来判定变量或者类的属性值是否为等价为空的数据,但是如下类:

    

 class Person
{
protected $attributes = []; public function __construct(array $attributes)
{
$this->attributes = $attributes;
} public function __get($name)
{
return $this->attributes[$name] ?? null;
} public function __isset($name)
{
$attribute = $this->$name; return !empty($attribute);
}
}
  var_dump( $person->firstName, empty($person->firstName) );

当方法  __isset()不存在时   empty($person->firstName)输出为false 但是添加__isset()方法后  它的返回结果为false

出现此情况原因:

  Person对象的成员变量是通过 __get 魔术方法从 $attributes 数组中检索出来的。当将变量传入一个普通函数时,$person->firstName 会先进行取值处理,然后再将获取到的结果作为参数传入函数内。但是 empty 不是一个函数,而是一种数据结构。所以当将      $person->firstName 传入 empty 时,并不会先进行取值处理。而是会先判断 $person 对象成员变量 firstName 的内容,由于这个变量并未真实存在,所以返回 false。

isset、empty 误区的更多相关文章

  1. php中函数 isset(), empty(), is_null() 的区别,boolean类型和string类型的false判断

    php中函数 isset(), empty(), is_null() 的区别,boolean类型和string类型的false判断 实际需求:把sphinx返回的结果放到ssdb缓存里,要考虑到sph ...

  2. PHP isset() empty() isnull() 的区别

    <? isset - 检测变量是否设置 注意: isset 检测变量是否设置,并且不是 NULL. 若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE: empty ...

  3. 常见类型,isset(),empty()判断

    <?php $a = NULL; var_dump($a);                  //NULL,[false],true var_dump(isset($a)); var_dump ...

  4. php isset() empty() 区别, 判断 变量存在与否神器

    先看PHP手册: bool empty ( mixed $var ) 判断一个变量是否被认为是空的.当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在.如果变量不存在的话,empty ...

  5. isset(), empty()

    isset()测试$a = '';isset($a); // true $a = FALSE;var_dump(isset($a)); // true $a = NULL;var_dump(isset ...

  6. unset() isset() empty difined()操作变量详解

    isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, ...]] )  功能:检测变量是否设置 返回值:  若变量不存在则返 ...

  7. [PHP基础]有关isset empty 函数的面试题

    用isset()和empty()判断下面的变量. $str = ''; $int = 0 ; $arr = array(); isset($str) 返回的是 true 还是 false empty( ...

  8. php之isset empty is_null的区别

    isset:当前变量没有设置(即不存在),或者变量设置为null的时候,返回true,设置为“”或者0 都是返回的true empty:变量不存在,设置值为null,设置为“”,设置为0 都返回tru ...

  9. isset ,empty,is_null 区别

    <?php $a = ''; $b = ""; $c = null; $d = array(); $e = ' '; $f = 0; $g = "0"; ...

随机推荐

  1. linux(centos7.0以上)下对mysql数据库的导入导出

    1:查看mysql安装路径: 指令 ps -ef|grep mysql 得出结果 root 968 1 0 18:25 ? 00:00:00 /bin/sh /usr/local/mysql/bin/ ...

  2. BZOJ[3728]PA2014 Final Zarowki

    有n个房间和n盏灯,你需要在每个房间里放入一盏灯.每盏灯都有一定功率,每间房间都需要不少于一定功率的灯泡才可以完全照亮. 你可以去附近的商店换新灯泡,商店里所有正整数功率的灯泡都有售.但由于背包空间有 ...

  3. gradle使用方法

    创建一个项目 你可以通过创建一个build.gradle的文件来开始一个项目,然后可以向文件中加入构建逻辑. $ mkdir basic-demo $ cd basic-demo $ touch bu ...

  4. “希希敬敬对”团队——敏捷冲刺Alpha过程总结

    “希希敬敬对”团队在七天冲刺过程中每一个小组成员都尽力去完成自己的任务.在合作过程中,总算是有一些成果出现,代码功能能够实现. 对此次冲刺有如下优缺点: 优点: 团队人员合作较多,成员都能够积极响应参 ...

  5. 一次特殊的“VARCHAR转numeric失败”错误记录

    今天接触到一个很有意思的问题.当我在执行一条INSERT的sql语句时,他总是报字符串转数字类型失败. 问题 首先,该表中的所有数字类型的字段都是非必填,其次,每个数字类型的字段都有默认值.最令我感到 ...

  6. FastDFS搭建单机图片服务器(一)

    防丢失转载:https://blog.csdn.net/MissEel/article/details/80856194 根据 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署 和 ...

  7. hdu-2819.swap(二分匹配 + 矩阵的秩基本定理)

    Swap Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. [BZOJ2829] 信用卡 (凸包)

    [BZOJ2829] 信用卡 (凸包) 题面 信用卡是一个矩形,唯四个角做了圆滑处理,使他们都是与矩形两边相切的1/4园,如下图所示,现在平面上有一些规格相同的信用卡,试求其凸包的周长.注意凸包未必是 ...

  9. 关于html5 video

    获取视频长度 <video id="video" width="200px" height="auto" src="vide ...

  10. Scala本地安装

    一.下载 https://www.scala-lang.org/download/ 这里我选择Scala2.10.4版本 二.安装 安装比较简单  和jdk类似 点击一路安装: 选择自己的路径 完成 ...