如何从子实例递归调用覆盖的父函数?由于我没有使用静态方法,所以我不能使用parent::method()
,但必须做一些不同的事情。我觉得有一个更好的方法解决我的问题,可能是通过设计模式。这是我的班级结构:
class Creature {
public function eat() {
// feed and digest
}
}
class Mammal extends Creature {
public function eat() {
// gather and chew
}
}
class Human extends Mammal {
public function eat() {
// have a meal
}
}
class WesternPerson extends Human {
public function eat() {
// use knife & fork
}
}
$me = new WesternPerson();
$me->eat();
调用eat()
将递归地从特殊类到非常抽象类。最简单的方法是,如果我可以在覆盖的内部调用具有相同名称的父函数。但我知道,它已被覆盖,所以我不能。
答案 0 :(得分:4)
::
不仅适用于静态方法。它是范围解析运算符。只要您想要使用除了上下文范围之外的范围内的函数,就可以使用它。
parent
,static
和self
是引用与您的调用范围相关的不同范围的语言构造。
所以在这种情况下
parent::eat()
将在WesternPerson :: eat语句中调用Human :: eat(即$ this将表示Human :: eat语境中的WesternPerson实例)
答案 1 :(得分:2)
正如评论中所述,调用parent::eat()
可以正常工作