我可以使用继承方法递归调用从子级到父级的方法吗?

时间:2012-05-21 00:10:58

标签: php

有很多子类调用重写父方法的例子,最常见的是parent::__construct()。但是,在这些情况下,您实际上是通过子项本身的具体方法调用父项。

有没有办法可以使用继承方法递归调用从子项到第一个祖先的方法?

如果我在我的抽象父类中使用parent::methodName(),则会导致致命错误,说“当前类范围没有父级时,无法访问父::”。大概这是因为“父”是相对于抽象类本身进行评估的,而不是当前的类上下文。

...谢谢

2 个答案:

答案 0 :(得分:1)

我不太确定你要做什么,但是:

  1. parent关键字是相对于它出现的类进行评估的。如果您使用parent关键字的类没有父级,则显然不起作用。
  2. 如果您希望孩子使用父方法,只需不要在子方法中覆盖该方法。在父级中定义一个强制子级调用父级方法的方法是没有意义的,当你需要做的只是不覆盖子级中的方法时。
  3. 你可以通过制作方法final强制父方法成为“最后一个字”,孩子将无法覆盖它。
  4. 孩子不能称之为“祖父母”的方法,因为孩子不知道,或者至少不能保证其父母依次有父母。
  5. 实际上,这意味着:

    1. 如果您正在编写的课程不是extend其他课程,则在其中的任何位置使用parent都没有意义。
    2. 如果你是extend一个类而没有覆盖一个方法,那么将自动使用父方法(它是继承的)。
    3. 如果你是extend一个类并且正在覆盖一个方法,你可以从被覆盖的方法调用parent的方法,而可以调用它parent的方法等。

答案 1 :(得分:0)

也许是这样的? (另)

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

我讨厌在代码中看到这种垃圾。