Php 我可以使用继承的方法从一个子代到父代递归调用一个方法吗?

Php 我可以使用继承的方法从一个子代到父代递归调用一个方法吗?,php,Php,有很多子类调用重写的父方法的示例,最常见的是parent::\uu construct()。但是,在这些情况下,实际上是从子对象本身的具体方法调用父对象 有没有一种方法可以使用继承的方法从子代递归调用方法到第一个祖先 如果在抽象父类中使用parent::methodName(),会导致一个致命错误,即“当前类作用域没有父类时无法访问parent::when”。这大概是因为“父”是相对于抽象类本身而不是当前类上下文进行计算的 谢谢…我不太确定您想做什么,但是: 父关键字是相对于它所在的类进行计算的

有很多子类调用重写的父方法的示例,最常见的是
parent::\uu construct()
。但是,在这些情况下,实际上是从子对象本身的具体方法调用父对象

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

如果在抽象父类中使用
parent::methodName()
,会导致一个致命错误,即“当前类作用域没有父类时无法访问parent::when”。这大概是因为“父”是相对于抽象类本身而不是当前类上下文进行计算的


谢谢…

我不太确定您想做什么,但是:

  • 父关键字
    是相对于它所在的类进行计算的。如果在中使用
    parent
    关键字的类没有父类,那么它显然不起作用
  • 如果希望子对象使用父对象的方法,请不要在子对象中重写该方法。在父对象中定义一个方法来强制子对象调用父对象的方法是没有意义的,因为您只需不重写子对象中的方法即可
  • 您可以通过将方法设置为final,强制父方法成为“最后一个词”,子方法将无法覆盖它
  • 孩子不能调用“祖父母的”方法,因为孩子不知道,或者至少不能保证父母轮流拥有父母
  • 实际上,这意味着:

  • 如果您正在编写一个不扩展另一个类的类,那么在其中的任何地方使用父类都是没有意义的
  • 如果您正在
    extend
    ing一个类,并且没有重写一个方法,则将自动使用父方法(它是继承的)
  • 如果您正在
    扩展一个类并重写一个方法,您可以从被重写的方法调用
    父类的方法,而被重写的方法又可以调用它的
    父类的方法等

  • 也许是这样的?(未经测试)


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

    您认为如何调用未实现的方法(抽象)?谢谢@Johntor,您说得对。请参见上面的编辑。
    foreach (get_class_parents($this) as $className) {
        (new ReflectionMethod($className, __METHOD__))->invoke($this, $args...);
    }