今天在推上看到一条获取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引入的bindto
。call
和bindto
的用法示例如下:
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 条评论) |