假设我有一个名为MyClass
which extends的类MyAbstractClass
。
里面MyClass
有myMethod
。里面MyAbstractClass
有myAsbtractClassMethod
。
有没有办法我可以在完成myAsbtractMethod
时调用myMethod
而不必放在parent::myAsbtractClassMethod
最后?
不,我害怕。
如果您希望实现“执行后挂钩”风格的功能,您可以设计您的类来实现 __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() 方法“拦截”,该方法在它自己的上下文中调用它,然后在它的父上下文中调用它。不过,这可能需要重新设计您的类的构建方式。