PHP 子类魔术__isset工作,但__get不起作用
我有一个抽象的父类(来自mongodb-php-odm)和一个继承类。 具有神奇__isset和__get方法,这些方法与类内的数组进行交互。Mongo_Document
Model_ActionPlan
Mongo_Document
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
更新 #1 2012-12-16:父类的完整代码在 Github 上。
更新 #2 2012-12-18:对于那些询问它在哪里或是否正确设置的人来说,答案是,由于调用确实有效,问题显然不是变量没有被设置。正在从名为 的私有 instace 变量获取其数据。如果我,我看到它确实等于预期的“闭合”值。parent::__get('status')
__get()
_object
var_dump($this)
$this->_object['status']
更新#3:子类的代码可在 https://gist.github.com/4332062。重要部分从第69行开始。
我见过类似的问题,但这个问题是关于使用父级的魔术方法来获取子级的属性,而我的问题是使用父级的 getter 来获取父级的属性。