2012-05-21 58 views
2

有很多子类调用覆盖父方法的例子,最常见的是parent::__construct()。然而,在这些情况下,您实际上是从孩子本身的具体方法调用父母。我可以使用继承的方法递归调用一个从子对象到父对象的方法吗?

有没有一种方法,我可以递归调用一个方法从孩子到第一个祖先,使用继承的方法?

如果我在抽象父类中使用parent::methodName(),它会导致一个致命错误,说'当前类作用域没有父对象时不能访问父::。大概这是因为'parent'正在被评估为相对于抽象类本身,而不是当前的类上下文。

谢谢...

+1

你认为如何调用未实现的方法(抽象)? – Johntor

+0

谢谢@Johntor,对吧。请参阅上面的编辑。 –

回答

0

也许致电parent像这样? (未经测试)

foreach (get_class_parents($this) as $className) { 
    (new ReflectionMethod($className, __METHOD__))->invoke($this, $args...); 
} 

我讨厌当我看到这个有点垃圾的代码。

1

我不太清楚你想要做什么,但:相对于它在发生类

  1. parent关键字进行评估。如果类您使用parent关键字中没有父级,显然不起作用。
  2. 如果您想要孩子使用父母的方法,请不要在孩子中重写该方法。在父项中定义一个强制子项调用父项方法的方法是没有意义的,当你需要做的只是不重写子项中的方法。
  3. 您可以通过使方法final强制父母的方法成为“最后的单词”,孩子将无法覆盖它。
  4. 孩子不能称为“祖父母”的方法,因为孩子不知道,或至少没有保证,其父母依次有父母。

在实际应用中,这意味着:

  1. 如果你正在写一类,没有extend另一个类,它没有任何意义,以它在任何地方使用parent
  2. 如果您是extend并且不重写某个方法,则会自动使用父项的方法(它是继承的)。
  3. 如果你是extend荷兰国际集团的一类,并重写一个方法,你可以“从覆盖的方法,这反过来又可以调用parent S分析的方法等
相关问题