首页 > 作文

PHP获取类私有属性的3种方法

更新时间:2023-04-08 23:41:14 阅读: 评论:0

今天在推上看到一条获取php类私有属性的推文,感觉很有意思:

顺着推文联想,还有其他方式吗?经过自己的测试及网上答案,总结出三种方法:

1. 反射

反射可以获取类的详细信息,要获取私有属性的值,只需将对应属性的reflectionproperty实例设置为可访问再取值即可。示例代码如下:

本人之前写过“php回顾之反射”一文,比较详细的介绍了反射及用法,有兴趣的阅读参考。

2. 转换成数组

这种方法用将对象强制转换成数组,再通过键获取其值。示例代码如下:

上述代码中key的拼接方式比较诡异,key规则如下:

public属性, key是 属性名;protected属性,key是 \0*\0属性名;private属性, key是 \0类名\0属性名。

注意 \0 是一个字符(不是两个),对应的ascii码是数字0。编程时要用双引号将其引起来。不能使用单引号,否则转义失效,那就是两个字符。如果你有c语言基础,应该知道 \0 就是字符串的结束符。这个符号直接输出不会显示,但可以通过strlen或者美容护肤小知识ord让其现形:

还需要注意拼接private属性时类名应该是 “完全限定类名” ,建议通过foo::面试答题class的方式获取。

与强制转换成数组类似的另一种方法是rialize,但是rialize比较慢,并且序列化后的字符串更难辨认结构和处理,不建议使用。

3. 闭包

文章开头的推特截图已经展示了闭包的用法,其中call方法在php7中引入,另一个是php5.4引入的bindtocallbindto的用法示例如下:

bindto方法的第二个参数注感悟人生语录意春江花月夜 古筝传入对象的 “完全限定类名”,指示函数应该放置在该类的作用域下,从而可以访问私有属性。

总结

性能: 数组 > 反射 > 闭包

易用性: 闭包 > 数组 > 反射

推荐: 闭包 > 反射 > 数组

以上就是php获取类私有属性的3种方法的详细内容,更多关于php获取类私有属性的资料请关注www偶函数.887551.com其它相关文章!

本文发布于:2023-04-08 23:41:12,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/bd443c2d6489ebd0ea0e95b8fb54f228.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP获取类私有属性的3种方法.doc

本文 PDF 下载地址:PHP获取类私有属性的3种方法.pdf

下一篇:返回列表
标签:属性   数组   反射   转换成
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图