在扩展类的方法之后调用抽象类中的方法?

时间:2013-08-23 05:49:26

标签: php methods call

假设我有一个名为MyClass的课程,其扩展为MyAbstractClass

MyClassmyMethod。在MyAbstractClassmyAsbtractClassMethod

myAsbtractMethod完成myMethod时是否可以调用parent::myAsbtractClassMethod,而不必将{{1}}放在最后?

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()方法'截获',它在它自己的上下文中调用它,然后在它的父节点中调用它。这可能需要重新设计您的类的构建方式。