別のクラス内の変数として動的にロードするクラスがあります。次のように実装しました。
public function &__get($key) {
if (array_key_exists($key, $this->values) { return $this->values[$key]; }
if ($key == "dr") {
if (!$this->dr) { $this->dr = new DR(); }
return $this->dr;
}
}
クラスの外からこの関数を利用すると、期待どおりに機能します。
echo $p->dr->name;
DR をシームレスに作成し、その名前を返します。クラス内から同じ手法を使用すると、__get()
関数が呼び出されず、NULL が返されます。
function drname() {
return $this->dr->name;
}
理由は理解できたと思いますが (そうしないと、最初の例で PHP が無限ループを作成します)、どうすればこれを解決できますか? を使用して解決策を見つけました$this->__get('dr')->name
が、これは本当に最善/唯一の方法ですか? ハッキーなようです。