我有一个抽象父类Mongo_Document
(来自mongodb-php-odm)和一个继承类Model_ActionPlan
。 Mongo_Document
具有神奇的 __isset 和 __get 方法,它们与类中的数组交互Mongo_Document
。
我正在尝试使用以下代码(来自方法内部的代码段Model_ActionPlan
):
if (isset($this->status))
{
if (($this->status === "closed") AND ($this->close_type != "failure"))
{
return;
}
}
(请注意,close_type
如果 ,则保证设置status == 'closed'
。)
isset
调用返回,然后true
执行继续到下一条语句。在那里,我收到以下错误:
Undefined property: Model_ActionPlan::$status
但是,如果我替换$this->status
为parent::__get('status')
,此代码将按预期工作。请注意,程序中的其他任何地方,我都可以使用:
$ap = new Model_ActionPlan($plan_id);
echo $ap->status;
// Prints 'closed' (or 'active') as expected
只有在这里,在类本身内部,这不起作用。
我环顾四周,似乎找不到任何地方说不能在子类中调用魔术方法。我可以改用parent::__get
调用,但我认为这可能是错误的方法。有谁知道是否有正确/更好的方法来做到这一点?
2012-12-16 更新 #1: 父类的完整代码在 Github 上。
2012 年 12 月 18 日更新 #2:
对于那些询问在哪里或是否设置正确的人,答案是由于调用parent::__get('status')
确实有效,问题显然不是变量没有设置。正在从名为的__get()
私有实例变量中获取数据_object
。如果 I var_dump($this)
,我看到它$this->_object['status']
确实等于预期的“关闭”值。
更新 #3: 子类的代码可在https://gist.github.com/4332062获得。重要的部分从第 69 行开始。
我已经看到了这个类似的问题,但是那个问题是关于使用父母的魔法方法来获取孩子的属性,而我的问题是使用父母的吸气剂来获取父母的属性。