PHP你所不知道的事--empty
关于 empty 的判断类型,就不赘述了,网上解释有很多。例如:0, ”, false, null 等都会被判定为 true。
这次探讨的是PHP中关于empty 对于对象私有属性的判断。
比如:
<?php
class a
{private $a1 = "123";public function __get($name){return $this->$name;}
}$a = new a();
var_dump($a->a1); //string(3) "123"
var_dump(empty($a->a1)); //bool(true)
我们都知道 private 私有属性是无法在外部读取的。想要读取就需要使用 魔术方法 __get 。 这种场景也经常经常在各种框架中出现。
从输出结果我们可以看出。读取是没有问题的。但是 empty 的判断却是 true。而我们再使用各种框架的时候,也经常如此直接判断,并没有该问题出现。那一定是框架背后做了一些什么。
在 stackoverflow 上也有很多人对此提出了疑问,也找到了解决方案,结合框架源码,也确实如此。 那就是增加 __isset() 魔术方法。 我们都知道 private 私有属性是无法在外部读取的。想要读取就需要使用 魔术方法 __get 。 这种场景也经常经常在各种框架中出现。
<?php
class a
{private $a1 = "123";public function __get($name){return $this->$name;}public function __isset($property){return isset($this->$property);}
}$a = new a();
var_dump($a->a1); //string(3) "123"
var_dump(empty($a->a1)); //bool(false)
现在返回的结果是不是跟预期一致了呢?确实是。问题解决。那为什么?
根据PHP官方的解释:__isset() is triggered by calling isset() or empty() on inaccessible properties.
和直接在 __get、__isset 方法中增加输出测试。可以得出,如不增加 __isset 魔术方法(或者说如果该方法不返回 true)。那么 empty 的过程中,是不会调用 __get 进行获取数据的。没有取到数据,所以结果为 true。
在 PHP 的源码中 empty 和 isset 最终调用的都是同一个方法。所以魔术方法也使用同样的 __isset 。
同样的 对于私有属性进行 unset 同样需要 __unset 魔术方法。
PHP你所不知道的事--empty相关推荐
- 跨性别,你所不知道的事
今晚原计划在订阅号里推送南溪妹子前几天录制的跨性别科普视频,没想到今天收到南溪的私信,说不做科普了,还是算了吧.急忙去了解了一下原因 (http://www.zhihu.com/pin/9631015 ...
- Linux C高阶(14)C语言宏定义你所不知道的事
文章目录 规避语法错误 什么时候使用宏定义 规避语法错误 众所周知,C语言支持宏定义,并且功能强大.举个例子: #include <stdio.h> #define swap(a,b) { ...
- 你所不知道的console.log()(console.log详解)
console.log,作为一个前端开发者,想必每天都会用它来做分析调试,但这个简单函数背后你所不知道的一面,很多人未必使用过,有一些也是很方便使用的 基础 首先,简单科普这个函数的作用.前端开发者可 ...
- python可以引流吗_python能干嘛?你所不知道的Python有趣用途(上)
前言 很多人都觉得Python虽然好学,但却不晓得如何将其应用到生活中,或是只知道Python可以拿来做「数据分析」.「爬虫」.甚至是「人工智慧」,但却觉得那些东西离自己很遥远 (尤其是初学者,经常会 ...
- ES6 你可能不知道的事 – 基础篇
ES6 你可能不知道的事 – 基础篇 转载 作者:淘宝前端团队(FED)- 化辰 链接:taobaofed.org/blog/2016/07/22/es6-basics/ 序 ES6,或许应该叫 ES ...
- 那些你所不知道的arXiv使用技巧
作者:Tom Hardy Date:2020-12-23 来源:那些你所不知道的arXiv使用技巧
- 系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT
https://my.oschina.net/fdhay/blog/638631 高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT 2016-02-18 大房 大房说 本文是我将最 ...
- ai的弹窗点了都不响应_【评价集合】拼多多评价,你所不知道的点都在这里!...
对于在拼多多开店的商家们来说,评价是消费者对于商品的好坏程度的一个评分,评价的高低不仅仅会影响到商品的销量,更会影响转化率以及权重!所以为了店铺商品的长远发展打算!各位商家在求取出评.好评的道路上不断 ...
- python 函数调用 不允许关键字参数_你所不知道的Python|函数参数的演进之路
原标题:你所不知道的Python|函数参数的演进之路 函数参数处理机制是Python中一个非常重要的知识点,随着Python的演进,参数处理机制的灵活性和丰富性也在不断增加,使得我们不仅可以写出简化的 ...
最新文章
- IDC预测2022年全球智能家居连接设备市场规模将达10亿台!
- python源代码的后缀名是_Python代码编译与反编译
- 对于c语言int类型和float,以及double类型表示范围的计算
- 【软件质量】ISO-9126质量模型
- java调用python代码
- 华为笔试题 简答错误记录(字符串处理,好题!!!)
- 生成网上下载的EF项目对应的数据库
- Prometheus 轻松实现集群监控
- ie下使用frameset布局导致跨域cookie丢失问题解决
- 文件标准标准IO与文件IO 的区别
- 一点创业想法:读书类垂直博客
- AutoDWG DWG 转换 PDF 控制组件-ActiveX
- OA与EHR系统集成方案
- DEV pivotGridControl 单元格内容变色
- java接口推送_推送API
- 在word中输入大于10圆圈内的数
- 如何用PS制作故障风格的海报
- 下载Xcode历史版本方法
- mac安装oh-my-zsh出现command not found: npm问题解决
- 关于拨号上网的几种错误解决办法
热门文章
- matlab加入混响,基于matlab音乐混响效果实现.pdf
- 一个优秀妹子的后台面试经验,含泪总结...
- Microsoft Excel 教程:如何在 Excel 单元格中设置文本格式?
- 公司破产了股需要东承担哪些责任
- NG-ALAIN 边学边记1
- shouldoverrideurlloading为什么有时候不走_心理学:为什么很多看似不般配的人,往往都能走到最后?...
- FIFO先进先出,FILO先进后出
- Unity UI架构设计理念
- Dracula PRO 零售版
- 【纪中受难记】——Day23:受刑