关于 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相关推荐

  1. 跨性别,你所不知道的事

    今晚原计划在订阅号里推送南溪妹子前几天录制的跨性别科普视频,没想到今天收到南溪的私信,说不做科普了,还是算了吧.急忙去了解了一下原因 (http://www.zhihu.com/pin/9631015 ...

  2. Linux C高阶(14)C语言宏定义你所不知道的事

    文章目录 规避语法错误 什么时候使用宏定义 规避语法错误 众所周知,C语言支持宏定义,并且功能强大.举个例子: #include <stdio.h> #define swap(a,b) { ...

  3. 你所不知道的console.log()(console.log详解)

    console.log,作为一个前端开发者,想必每天都会用它来做分析调试,但这个简单函数背后你所不知道的一面,很多人未必使用过,有一些也是很方便使用的 基础 首先,简单科普这个函数的作用.前端开发者可 ...

  4. python可以引流吗_python能干嘛?你所不知道的Python有趣用途(上)

    前言 很多人都觉得Python虽然好学,但却不晓得如何将其应用到生活中,或是只知道Python可以拿来做「数据分析」.「爬虫」.甚至是「人工智慧」,但却觉得那些东西离自己很遥远 (尤其是初学者,经常会 ...

  5. ES6 你可能不知道的事 – 基础篇

    ES6 你可能不知道的事 – 基础篇 转载 作者:淘宝前端团队(FED)- 化辰 链接:taobaofed.org/blog/2016/07/22/es6-basics/ 序 ES6,或许应该叫 ES ...

  6. 那些你所不知道的arXiv使用技巧

    作者:Tom Hardy Date:2020-12-23 来源:那些你所不知道的arXiv使用技巧

  7. 系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT

    https://my.oschina.net/fdhay/blog/638631 高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT 2016-02-18 大房 大房说 本文是我将最 ...

  8. ai的弹窗点了都不响应_【评价集合】拼多多评价,你所不知道的点都在这里!...

    对于在拼多多开店的商家们来说,评价是消费者对于商品的好坏程度的一个评分,评价的高低不仅仅会影响到商品的销量,更会影响转化率以及权重!所以为了店铺商品的长远发展打算!各位商家在求取出评.好评的道路上不断 ...

  9. python 函数调用 不允许关键字参数_你所不知道的Python|函数参数的演进之路

    原标题:你所不知道的Python|函数参数的演进之路 函数参数处理机制是Python中一个非常重要的知识点,随着Python的演进,参数处理机制的灵活性和丰富性也在不断增加,使得我们不仅可以写出简化的 ...

最新文章

  1. IDC预测2022年全球智能家居连接设备市场规模将达10亿台!
  2. python源代码的后缀名是_Python代码编译与反编译
  3. 对于c语言int类型和float,以及double类型表示范围的计算
  4. 【软件质量】ISO-9126质量模型
  5. java调用python代码
  6. 华为笔试题 简答错误记录(字符串处理,好题!!!)
  7. 生成网上下载的EF项目对应的数据库
  8. Prometheus 轻松实现集群监控
  9. ie下使用frameset布局导致跨域cookie丢失问题解决
  10. 文件标准标准IO与文件IO 的区别
  11. 一点创业想法:读书类垂直博客
  12. AutoDWG DWG 转换 PDF 控制组件-ActiveX
  13. OA与EHR系统集成方案
  14. DEV pivotGridControl 单元格内容变色
  15. java接口推送_推送API
  16. 在word中输入大于10圆圈内的数
  17. 如何用PS制作故障风格的海报
  18. 下载Xcode历史版本方法
  19. mac安装oh-my-zsh出现command not found: npm问题解决
  20. 关于拨号上网的几种错误解决办法

热门文章

  1. matlab加入混响,基于matlab音乐混响效果实现.pdf
  2. 一个优秀妹子的后台面试经验,含泪总结...
  3. Microsoft Excel 教程:如何在 Excel 单元格中设置文本格式?
  4. 公司破产了股需要东承担哪些责任
  5. NG-ALAIN 边学边记1
  6. shouldoverrideurlloading为什么有时候不走_心理学:为什么很多看似不般配的人,往往都能走到最后?...
  7. FIFO先进先出,FILO先进后出
  8. Unity UI架构设计理念
  9. Dracula PRO 零售版
  10. 【纪中受难记】——Day23:受刑