好的,我知道这可能是不可能的,但我会试一试。也许我的知识不是那么好。请不要投反对票,这只是出于好奇,这可能是由于糟糕的 OO 设计。
假设类定义为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