名前の付け方はわかりませんが、ここにはあります。仮定することができます私はPHP OOPのクラスと関数
class A {
public function aa() {
$this->bb();
}
public function bb() {
}
}
class B extends a {
}
class C {
__construct(B $service) {
$this->service = $service;
}
public function aa() {
$this->service->aa();
}
}
次のコードで私の呼び出しは、だから、これは基本的に私が欲しいものであるA:aa()
を実行します
$C = new C(new B());
$C->aa();
になりました。ご覧のとおり、A::aa()
AA::bb()
が呼び出されます。
私に必要なもの。 AA :: bb()が呼び出されたとき、クラスCで定義されたコードを実行したいが、Aクラスを変更することはできない。 BクラスまたはCクラスのみを変更できます。
私の考えはBクラスでリスナーを追加し、この
class B extends a {
public $listener;
bb() {
parent::bb();
$this->listener();
}
}
class C {
__construct(B $service) {
$this->service = $service;
}
public function aa() {
$this->service->listener = function() { }
$this->service->aa();
}
}
のようにBB()関数を上書きすることでした。しかし、私はこのアイデアをたくさん好きではない、良いもののように見えていません。私の選択肢は何ですか?
私はAクラスを変更できません。私はCクラスのみを呼び出すことができます。
PHPバージョン5.3
リスナーロジックをクラスBに直接保存することはできないため、あまりオプションはありません。 '$ this-> service-> listener = function(){}'をコンストラクタthoに移動します。なぜあなたはそれが気に入らないのですか? –