​PHP开发过程的那些坑(五) ——PHP的empty()

PHP开发过程的那些坑(五)——PHP的empty()

(原创内容,转载请注明来源,谢谢)

一、遇到的问题

PHP的empty不是一个函数,而是一个语言结构,用其可以判断大多数的变量是否为空。但是,在判断private的属性(已经用魔术方法__get()保证可以获取到)的时候,会发生奇怪的事情。

现象实例:

class Object{
private $prop;
public function __construct(){
$this->prop = ‘a’;
}
public function __get($prop){
return $this->$prop;
}
}
$obj = new Object();
var_dump($obj->prop);// a
var_dump(empty($obj->prop));//true,不正常现象
var_dump(‘’ == $obj->prop);//false

二、问题分析

经过查阅资料,采用empty判断对象的private的属性是否为空的时候,会调用的是对象对应的类的魔术方法__isset(),即判断这个属性是否存在,而不是去判断属性的值了。

这样就可以解释,为什么实际属性值非空,而empty判断是true。

三、解决方案

1、采用==判断是否为空。

2、$prop = $obj->prop; empty($prop);

3、将对象的private设置成public。

第三种得根据业务场景,不一定都可以用public;第二种和第一种比较通用,个人建议对于判断类的属性值的问题,都统一用第一种,这样可以避免很多不必要的坑。

——written by linhxx 2017.09.14

相关阅读:

PHP开发过程的那些坑(四) ——PDO bindParam函数

PHP开发过程的那些坑(三) ——PHParray_shift函数

PHP开发过程的那些坑(二) ——PHP empty函数

PHP开发过程的那些坑(一) ——对象拷贝

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2017-09-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏鸿的学习笔记

Python的浅复制和深复制

在前文已经看到过了可以使用list函数去复制一个列表,这个就是浅复制,浅复制会构建一个新的对象,并且维护之前对象(子对象)的引用,而深复制则是将之前的子对象通过...

914
来自专栏云霄雨霁

字符串查找----三向单词查找树

1261
来自专栏程序生活

浅谈Python内置函数chr、ord简介chrord学习资料

1413
来自专栏desperate633

LintCode 加一题目分析代码

样例 给定[1,2,3] 表示 123, 返回[1,2,4] . 给定[9,9,9] 表示 999, 返回[1,0,0,0]

642
来自专栏xingoo, 一个梦想做发明家的程序员

Kibana中doc与search策略的区别

在kibana中包含两种策略:doc和search。使用了两个循环队列来获取请求,并进行响应。 doc的代码如下: clientMethod: 'mget' ...

21510
来自专栏数据结构与算法

18:验证子串

18:验证子串 总时间限制: 1000ms 内存限制: 65536kB描述 输入两个字符串,验证其中一个串是否为另一个串的子串。 输入输入两个字符串, 每...

3434
来自专栏cnblogs

Webpack+Vue如何导入Jquery和Jquery的第三方插件

创建一个jquery-vendor.js文件 import $ from 'jQuery'; console.log($); window.$ = $; win...

19710
来自专栏逸鹏说道

Mongodb中经常出现的错误 child process failed, exited with error number

异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 异常处理汇总-数据库系列 http:/...

3565
来自专栏岑志军的专栏

Swift-单例

1665
来自专栏小樱的经验随笔

UVa 11461 - Square Numbers【数学,暴力】

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=...

3005

扫描关注云+社区