魔法方法+反射 API = 无法调查类属性。为什么?
如果我使用魔法的话。使用反射 API 时,我无法调查类属性。为什么会这样?
编辑
什么是Reflection API?请不要推荐我 php.net 我不明白..请用你的话引导我 plsss
If I use magic methods. While using reflection API, I can't investigate class properties.. Why is it so?
EDIT
What is Reflection API? pls do not refer me php.net i didnt understood that.. guide me in your words plsss
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用魔术方法访问属性,这些属性通常不会出现在类的定义中。
您的类的定义通常如下所示:
由于没有真正的属性——只有一个
$data
数组,它将被魔术方法__get
使用>__set 作为一个大数据存储——反射 API 无法看到它们。这是使用魔术方法引起的问题之一:它们用于访问不存在的属性(或方法,使用
__call
) - 并且反射 API 只能看看那里有什么。Using magic methods to access properties, those properties will generally not be present in the class' definition.
Your class' definition will generally look like this :
As there is no real properties -- there is on only a
$data
array, which will be used by the magic methods__get
an__set
as a big data-store -- those cannot be seen by the Reflection API.That's one of the problems caused by using magic methods : they are used to access properties (or methods, with
__call
) which are not there -- and the Reflection API can only see what's there.一个可能的解决方案可能是增加受保护的 $data 的范围:
这样,扩展类就可以访问它们认为合适的数组并收集运行时定义的属性。
A possible solution might be to increase the scope of $data to protected:
This way, extended classes can access the array as they see fit and collect runtime defined properties.