我有以下类结构:
class Parent
{
public function process($action)
{
// i.e. processCreateMyEntity
$this->{'process' . $action};
}
}
class Child extends Parent
{
protected function processCreateMyEntity
{
echo 'kiss my indecisive ass';
}
}
我需要在 Child 类中编写一些统一的方法来处理几个非常相似的创建实体的操作。我无法更改 Parent::process,我需要从中调用这些方法。
首先想到的是神奇的 __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 内部调用,但这闻起来很糟糕。
有任何想法吗?