좋아, 아마도 이것이 가능하지는 않지만, 시도해 볼게. 어쩌면 내 지식이 그렇게 좋지 않을 수도 있습니다. 제발 downvote하지 마세요, 이것은 단지 호기심에 대한 그리고 아마도 어쩌면 열악한 물건 디자인 때문일 수 있습니다.PHP에서 상속없는 인스턴스 메소드를 재정의 하시겠습니까?
이 A
에 대한 클래스 정의가 가정 :
class A
{
public function build()
{
$data = $this->fetchData();
...
}
public function fetchData()
{
// Database eavy query
return $this->repository->fetchDataForCharting();
}
}
그리고, 좋은 괜찮은 OO 디자인을 사용하지 않고, 당신은 클래스 B
다른 몇 가지 다른 일을 위해, 저장소에서 fetchDataForCharting
를 사용하려고하는 생성 계산 :
class B
{
public $data;
public function getMonthlyLimit()
{
// Database eavy query
$data = $this->getData();
}
public function getData()
{
return isset($this->data) ? $this->data :
$this->repository->fetchDataForCharting();
}
}
은 때때로 당신은 때때로 당신은, 때때로 모두 만 B
필요 만 A
해야합니다. 런타임에 fetchData
을 무시할 수있는 방법이 있습니까? 내가 jQuery를에 $.extend()
같은가 someting 의미 :
$b = new B();
$b->getMonthlyLimit(); // $b->data filled
$a = new A();
// Override fetchData
$a = extend($a, 'fetchData', function() use($b) { return $b->data; });
$a->build(); // Just 1 query
물론 알고 있습니다. 그러나 A와 B를 상속의 일부가 아닌 다른 의미를 가진 별개의 대상으로 생각하십시오 ... – gremo