有三种情况(我能想到),您可以在子类中调用方法,而该方法在父类中退出:
方法不会被子类覆盖,只存在于父类中。
这与您的示例相同,通常最好使用$this -> get_species();
您是对的,在这种情况下两者实际上是相同的,但是方法已被子类继承,因此没有理由区分。通过使用$this
,您可以在继承的方法和本地声明的方法之间保持一致。
方法被子类覆盖,并且具有来自父类的完全独特的逻辑。
在这种情况下,您显然想要使用$this -> get_species();
,因为您不希望执行父版本的方法。同样,通过始终使用$this
,您不必担心这种情况与第一种情况之间的区别。
方法扩展了父类,增加了父方法实现的功能。
在这种情况下,您仍然希望`$this -> get_species();
在从子类的其他方法调用该方法时使用。您将调用父方法的一个地方将来自覆盖父方法的方法。例子:
abstract class Animal {
function get_species() {
echo "I am an animal.";
}
}
class Dog extends Animal {
function __construct(){
$this->get_species();
}
function get_species(){
parent::get_species();
echo "More specifically, I am a dog.";
}
}
我能想象的唯一需要在覆盖方法之外直接调用父方法的情况是,如果他们做了两件不同的事情,并且您知道您需要该方法的父版本,而不是本地版本。这不应该是这种情况,但如果它确实出现了,解决这个问题的干净方法是创建一个新方法,其名称就像get_parentSpecies()
它所做的只是调用父方法:
function get_parentSpecies(){
parent::get_species();
}
同样,这使一切保持良好和一致,允许对本地方法进行更改/修改,而不是依赖于父方法。