이름을 지정하는 방법을 모르겠지만 여기에 설명되어 있습니다. 가정하자 내가 코드에서 다음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();
}
}
내 전화가
$C = new C(new B());
$C->aa();
그래서이 기본적으로 내가 원하는 무엇인가하는
A:aa()
를 실행 할 것이다있다. 보시다시피,
A::aa()
AA::bb()
이라고합니다.
내가 필요한 것. AA :: bb()를 호출 할 때 클래스 C에서 정의 된 코드를 실행하려고하지만 A 클래스를 변경할 수 없습니다. B 클래스 또는 C 클래스 만 변경할 수 있습니다.
내 생각이
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() 함수를 B 클래스에 리스너를 추가하고 덮어했다 그러나 나는 많은, 좋은 일처럼 보이지 않는이 아이디어를 좋아하지 않는다 . 내 옵션은 무엇입니까?
다시 말해서 A 클래스를 변경할 수 없으며 C 클래스 만 호출 할 수 있습니다.
PHP 버전은 5.3
청취자 로직을 클래스 B에 직접 저장할 수 없으므로 너무 많은 옵션이 없습니다. 나는 $ this-> service-> listener = function() {}'을 생성자로 옮깁니다. 왜 싫어하니? –