如何检查已通过重写__set设置的类属性


How do I inspect a class property that has been set by overridding __set

具体来说,我使用的是Yii框架,它通过重写__set方法来填充其模型。

但是,当我使用xdebug检查模型类的实例时,我看不到这些属性。

我如何检查它们?

我在Yii论坛上也问过这个问题。

卢克的一个有用的建议是密切关注这个变量。

Yii神奇的__get/__set重写旨在成为组件属性的一站式商店,可以使用不透明的getter/setter方法(在这种情况下,可能根本没有什么可检查的)或通过行为来实现。附加到组件的行为存储在CComponent::$_m私有变量中,因此在这种情况下,您必须像Yii一样执行操作:深入$_m并检查哪个行为(如果有的话)实现了该属性。

如果Yii使用getter和setter,则意味着这些属性要么是私有的,要么是受保护的。如果xdebug所做的只是print_r的高级版本,我认为它也看不到(我认为我对受保护属性的看法可能是错误的)。如果Yii属性是私有的,xdebug甚至不知道属性名称,因此它无法按名称检索属性(这将触发getter方法)。

一个简单的测试是将整个对象打印到屏幕上(如果你想让它清晰可见,可以使用<pre>),看看哪些属性可见,哪些不可见。如果您看到的是xedebug显示的相同内容,那是因为xedebug无法使用任何方法来获取对象属性。

如果你能看到所有的属性,我可能仍然在正确的轨道上,但我无法猜测实际的原因。

对于CActiveRecord,它们在属性成员中设置。检查您感兴趣的类的父类的实现。