在三种情况下(我可以想到),您将在子类中调用方法而该方法在父类中退出:
方法不会被子类覆盖,仅存在于父类中。
这与您的示例相同,通常最好使用$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();
}
同样,这可以使所有内容保持良好和一致,从而允许对本地方法进行更改/修改,而不是依赖于父方法。
$leg = new leg()内部创建一个human,如何从一个腿实例内部调用人的功能$leg?