リフレクションを使用して、オブジェクトインスタンスのメソッドを変更することが可能です

StackOverflow https://stackoverflow.com/questions/1754084

質問

私は何をしようとしていることは平野古いPHPオブジェクトとドメインモデルを作成することです。 私は、すべてのインフラストラクチャのものを行いますライブラリを作成しています。 だから私のモデルの一つは、このようになります。

class Project {
  public $id;
  public $name;
  public $typeId;

  private $type;

  public function getType() {
    return $this->type;
  }

  public function setType(Type $type) {
    $this->typeId = $type->id;
    $this->type = $type;
  }
}

これで新しいプロジェクトを作成し、有効なTypeオブジェクトをsetTypeを呼び出し、プロジェクトとタイプの両方が保存されているORMを使用してプロジェクトのインスタンスを保存する場合。しかし、その後、私はプロジェクトをロードし、私はORMはpersitenceからオブジェクトをロードするために透過的にこの方法を変更したしたいgetTypeメソッドを使用します。そこでここでは、この方法:

public function getType() {
  return $this->type;
}

透過的に変更する:

public function getType() {
  if (is_null($this->type) {
    $this->type = $this->adapter->findById('table', $this->typeId);
  }

  return $this->type; // or return parent::getType();
}
アウトレットPHPはので、私は方法があるかどうリフレクションAPIを使用して解決策を探していますプロジェクトのサブクラスをProject_Proxyと呼ばれるプロジェクトのためのプロキシクラスを作成するためにevalを使用していますが、時々あるでしょう。

私はメソッドの動作を変更するために、とにかくGoogleで検索しましたが、見つかっていない。

編集:?のか、私のモデルのためのプロキシクラスを作成するために、アウトレットPHPのevalメソッドを使用することをお勧めし、それらのすべてのサブクラスになります。

他のヒント

php.netでの反射ドキュメントのを見ると、それがに表示されます私は飛行方式に変更することは不可能です。

あなたは別の方法でそれを行うようにしてくださいます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top