有很多子类调用重写父方法的示例,最常见的是parent::__construct()
. 然而,在这些情况下,您实际上是从子进程本身的具体方法调用父进程。
有没有一种方法可以使用继承的方法递归地从孩子调用一个方法到第一个祖先?
如果我parent::methodName()
在我的抽象父类中使用它会导致一个致命错误说“当当前类范围没有父级时无法访问父级::”。大概这是因为“父”是相对于抽象类本身而不是当前类上下文进行评估的。
谢谢...
有很多子类调用重写父方法的示例,最常见的是parent::__construct()
. 然而,在这些情况下,您实际上是从子进程本身的具体方法调用父进程。
有没有一种方法可以使用继承的方法递归地从孩子调用一个方法到第一个祖先?
如果我parent::methodName()
在我的抽象父类中使用它会导致一个致命错误说“当当前类范围没有父级时无法访问父级::”。大概这是因为“父”是相对于抽象类本身而不是当前类上下文进行评估的。
谢谢...
我不太确定您要做什么,但是:
parent
关键字是相对于它出现的类进行评估的。如果你使用关键字的类没有parent
父类,它显然不起作用。final
,孩子将无法覆盖它。实际上,这意味着:
extend
另一个类的类,那么在其中的任何地方使用都是没有意义的parent
。extend
创建一个类并且没有覆盖方法,则将自动使用父方法(它是继承的)。extend
编写一个类并覆盖一个方法,您可以parent
从该覆盖的方法调用 ' 方法,而后者又可以调用其parent
' 方法等。也许是这样的?(未经测试)
foreach (get_class_parents($this) as $className) {
(new ReflectionMethod($className, __METHOD__))->invoke($this, $args...);
}
当我在代码中看到这种垃圾时,我讨厌。