好吧,我知道這可能是不可能的,但我會試一試。也許我的知識不太好。請不要低估,這只是爲了好奇,這可能是由於糟糕的OO設計。覆蓋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();
}
}
有時你只需要A
,有時候你只需要B
,有時兩者。在運行時是否有任何方法覆蓋fetchData
?我的意思是像成纔在$.extend()
jQuery的:
$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 2012-07-16 23:10:55