从php中的一个孩子调用覆盖的父函数

时间:2013-06-05 14:00:06

标签: php class oop inheritance parent-child

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

2 个答案:

答案 0 :(得分:4)

::不仅适用于静态方法。它是范围解析运算符。只要您想要使用除了上下文范围之外的范围内的函数,就可以使用它。

parentstaticself是引用与您的调用范围相关的不同范围的语言构造。

所以在这种情况下

 parent::eat()

将在WesternPerson :: eat语句中调用Human :: eat(即$ this将表示Human :: eat语境中的WesternPerson实例)

答案 1 :(得分:2)

正如评论中所述,调用parent::eat()可以正常工作