1

別のクラス内の変数として動的にロードするクラスがあります。次のように実装しました。

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が、これは本当に最善/唯一の方法ですか? ハッキーなようです。

4

0 に答える 0