我有下面的類結構:PHP棘手的問題
class Parent
{
public function process($action)
{
// i.e. processCreateMyEntity
$this->{'process' . $action};
}
}
class Child extends Parent
{
protected function processCreateMyEntity
{
echo 'kiss my indecisive ass';
}
}
我需要寫在子類中的一些方法,統一處理幾個非常類似的操作,用於創建實體。我無法更改Parent :: process,我需要從中調用這些方法。
首先想到的是magic __call方法。實體名稱是從第一個__call參數解析的。所以結構轉向:
class Parent
{
public function process($action)
{
// i.e. processCreateMyEntity
$this->{'process' . $action};
}
}
class Child extends Parent
{
protected function __call($methodName, $args)
{
$entityName = $this->parseEntityNameFromMethodCalled($methodName);
// some actions common for a lot of entities
}
}
但事情是,__call無法保護,因爲我需要它。我在__call方法的開頭部署了一個hack方法調用,它通過debug_backtrace檢查此方法在Parent :: process中調用,但是這種方法很糟糕。
任何想法?
請爲您的問題選擇一個更具描述性的標題。 – hakre
我試過,但我失敗:( – zapadlo