加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 通过Reflection访问SplObjectStorage数据

发布时间:2020-12-13 17:23:43 所属栏目:PHP教程 来源:网络整理
导读:是否可以使用Reflection或其他方法访问SplObjectStorage的数据?当我在其上使用print_r时,我可以看到有一个包含所有数据的数组的私有属性$storage,但我无法以任何方式使用Reflection访问它.是否有其他可能的解决方案来获取数据而不用foreach迭代集合? 解决
是否可以使用Reflection或其他方法访问SplObjectStorage的数据?当我在其上使用print_r时,我可以看到有一个包含所有数据的数组的私有属性$storage,但我无法以任何方式使用Reflection访问它.是否有其他可能的解决方案来获取数据而不用foreach迭代集合?

解决方法

无法通过Reflection访问$storage属性,因为它不存在.

在类上调用print_r(或var_dump)时看到的是调试信息.此信息通过类的内部get_debug_info处理程序提供.此处理程序允许内部类显示有意义的调试信息,而无需定义实际属性

与切片相关的问题显示以下代码段:

$r = new ReflectionClass('DateTime');
var_dump($r->hasProperty("timezone"));

上面的代码将告诉您该类没有timezone属性,即使您可以访问DateTime对象上的timezone属性.原因是此属性未声明,它仅通过内部get_properties处理程序提供.再次,这是一个不能直接访问的属性,它只存在于a)提供有意义的调试输出和b)指定序列化对象时应序列化的内容.

总结:反思内部类的“属性”通常不会成功,因为这些属性通常不存在.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读