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
それはおそらく間違った方法だと思います。これを行う正しい/より良い方法があるかどうか誰かが知っていますか?
更新 #1 2012-12-16: 親クラスの完全なコードはGithub にあります。
更新 #2 2012-12-18:
どこで、または適切に設定されているかどうかについて尋ねた人々の答えは、呼び出しparent::__get('status')
は機能するため、問題は変数が設定されていないことではないということです。は、 という名前__get()
のプライベート インスタンス変数からデータを取得しています_object
。I の場合、期待される「クローズ」値に等しいことがvar_dump($this)
わかります。$this->_object['status']
更新 #3: 子クラスのコードはhttps://gist.github.com/4332062で入手できます。重要な部分は 69 行目からです。
この同様の質問を見たことがありますが、それは親の魔法のメソッドを使用して子のプロパティを取得することに関するものであり、私の問題は親のゲッターを使用して親のプロパティを取得することです。