isset、empty 误区
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 误区的更多相关文章
- php中函数 isset(), empty(), is_null() 的区别,boolean类型和string类型的false判断
php中函数 isset(), empty(), is_null() 的区别,boolean类型和string类型的false判断 实际需求:把sphinx返回的结果放到ssdb缓存里,要考虑到sph ...
- PHP isset() empty() isnull() 的区别
<? isset - 检测变量是否设置 注意: isset 检测变量是否设置,并且不是 NULL. 若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE: empty ...
- 常见类型,isset(),empty()判断
<?php $a = NULL; var_dump($a); //NULL,[false],true var_dump(isset($a)); var_dump ...
- php isset() empty() 区别, 判断 变量存在与否神器
先看PHP手册: bool empty ( mixed $var ) 判断一个变量是否被认为是空的.当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在.如果变量不存在的话,empty ...
- isset(), empty()
isset()测试$a = '';isset($a); // true $a = FALSE;var_dump(isset($a)); // true $a = NULL;var_dump(isset ...
- unset() isset() empty difined()操作变量详解
isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, ...]] ) 功能:检测变量是否设置 返回值: 若变量不存在则返 ...
- [PHP基础]有关isset empty 函数的面试题
用isset()和empty()判断下面的变量. $str = ''; $int = 0 ; $arr = array(); isset($str) 返回的是 true 还是 false empty( ...
- php之isset empty is_null的区别
isset:当前变量没有设置(即不存在),或者变量设置为null的时候,返回true,设置为“”或者0 都是返回的true empty:变量不存在,设置值为null,设置为“”,设置为0 都返回tru ...
- isset ,empty,is_null 区别
<?php $a = ''; $b = ""; $c = null; $d = array(); $e = ' '; $f = 0; $g = "0"; ...
随机推荐
- oracle linux 7使用udev绑盘操作
参考:Oracle Linux 7: Udev rule for ASM Cannot Place the ASM Disk in a Directory under /dev (Doc ID 221 ...
- Angular5 错误: ngModel cannot be used to register form controls with a parent formGroup directive
在创建一个表单时,出现了这样的错误: 原因是,在最外层的form中使用了 formGroup 指令,但在下面的某个input 元素中,使用了ngModel 指令,但没有加入formControl 指令 ...
- python列表-简单操作
一.下标操作(下标只能是整数,不能是浮点值) 1.用下标取值 (1)取单个值 In [69]: list01 Out[69]: [2, 3, 4, 5, 'b', 'v', 'c', 666] In ...
- 打开虚拟机提示 无法获得vmci 驱动程序的版本:句柄无效
我从另一台电脑复制过来虚拟机,提示如题. 找到 我的虚拟机的 *.vmx文件(如NeoKylin.vmx),其中有 vmci0.present = "TRUE",将TRUE改为 ...
- 洛谷 P2672 推销员(贪心,模拟)
传送门 解题思路 第一种: 对于选i家,很显然,a值前i-1家的一定会选,所以只需要考虑最后一家的选法.要么是选择a值第i大的(就不管s了),要么选择剩下的中s最大的. 我们把每一家的情况(s和a)存 ...
- selenium的常见异常
selenium的常见异常 Exceptions(异常)Python 自带的异常,所有异常的基类. 异常: selenium.common.exceptions.ElementNotSelectabl ...
- ubantu 安装mongodb数据库
STEP 1: 在终端输入GPK码 $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334B ...
- [ZJOI2009]取石子游戏
瞪了题解两三天,直接下转第二篇题解就康懂了 首先我们令 : \(L[i][j]\) 表示当前 \([i,j]\) 区间左侧放置 \(L[i,j]\) 数量的石子后先手必败 \(R[i][j]\) 表示 ...
- Oracle之共享服务器模式
在共享服务器体系结构中,一个dispatcher分派器将传入网络的多个会话请求定向到一个共享服务器进程池,消除了为每个连接分配一个专用服务器进程的需要.作为一般的指导原则,仅当系统需要并发连接到数据库 ...
- javaScript基础--概念以及使用
1.什么javascript? 为什么要学习? 处理网站动态特效 为后期课程打基础 什么是javascript? 是一个客户端的具有安全性的脚本语言. js和h5 的关系 : 都是向静态的元素动起来 ...