好吧,我知道这可能是不可能的,但我会试一试。也许我的知识不太好。请不要低估,这只是为了好奇,这可能是由于糟糕的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