通过Reflection访问SplObjectStorage数据

Sma*_*sty 4 php reflection spl

是否可以访问SplObjectStorage使用Reflection或其他方法的数据?当我使用print_r它时,我可以看到有一个$storage包含所有数据的数组的私有属性,但我无法以任何方式使用Reflection访问它.是否有其他可能的解决方案来获取数据而无需迭代集合foreach

Nik*_*kiC 5

$storage由于它不存在,因此无法通过Reflection 访问该属性.

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

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

$r = new ReflectionClass('DateTime');
var_dump($r->hasProperty("timezone"));
Run Code Online (Sandbox Code Playgroud)

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

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