1

如何从子实例递归调用覆盖的父函数?因为我没有使用静态方法,所以我不能使用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()将从特殊类递归到非常抽象类。最简单的方法是,如果我可以从被覆盖的函数中调用具有相同名称的父函数。但我知道,它被覆盖了,所以我不能。

4

2 回答 2

4

::不仅适用于静态方法。它是范围解析运算符。任何时候您想使用存在于上下文范围之外的范围内的函数时都可以使用它。

parent, static, 和self是引用与您的调用范围相关的不同范围的语言结构。

所以在这种情况下

 parent::eat()

将在 WesternPerson::eat 上下文中调用 Human::eat(即 $this 将表示 Human::eat 上下文中的 WesternPerson 实例)

于 2013-06-05T14:07:50.237 回答
2

如评论中所述,调用parent::eat()就可以了

于 2013-06-05T14:04:44.757 回答