假设我有一个名为MyClass
的课程,其扩展为MyAbstractClass
。
在MyClass
内myMethod
。在MyAbstractClass
内myAsbtractClassMethod
。
myAsbtractMethod
完成myMethod
时是否可以调用parent::myAsbtractClassMethod
,而不必将{{1}}放在最后?
答案 0 :(得分:1)
不,我不害怕。
如果您希望实现'post execution hook'样式功能,您可以设计您的类来实现__call()魔术方法。例如:
<?php
abstract class AbstractTest
{
protected function myMethod()
{
echo 'Bar';
}
}
class Test extends AbstractTest
{
public function __call($methodName, $args)
{
call_user_func_array(array($this, $methodName), $args);
call_user_func_array(array('parent', $methodName), $args);
}
protected function myMethod()
{
echo 'Foo';
}
}
$test = new Test();
// Will output 'FooBar'
$test->myMethod();
通过声明myMethod()受到保护,您无法公开调用它。因此它被__call()方法'截获',它在它自己的上下文中调用它,然后在它的父节点中调用它。这可能需要重新设计您的类的构建方式。