Istnieją trzy scenariusze (które przychodzą mi do głowy), w których można wywołać metodę w podklasie, w której metoda kończy się w klasie nadrzędnej:
Metoda nie jest nadpisywana przez podklasę, istnieje tylko w rodzicu.
To jest to samo, co twój przykład i ogólnie lepiej jest użyć opcji $this -> get_species(); Masz rację, że w tym przypadku obie są faktycznie takie same, ale metoda została odziedziczona przez podklasę, więc nie ma powodu, aby różnicować. Używając $this, zachowujesz spójność między metodami dziedziczonymi i zadeklarowanymi lokalnie.
Metoda jest nadpisywana przez podklasę i ma całkowicie unikalną logikę od rodzica.
W tym przypadku oczywiście chciałbyś użyć, $this -> get_species();ponieważ nie chcesz, aby wersja metody nadrzędna była wykonywana. Ponownie, konsekwentnie używając $this, nie musisz się martwić różnicą między tym przypadkiem a pierwszym.
Metoda rozszerza klasę nadrzędną, dodając do tego, co osiąga metoda nadrzędna.
W takim przypadku nadal chcesz używać `$this -> get_species();podczas wywoływania metody z innych metod podklasy. Jedynym miejscem, w którym nazwiesz metodę nadrzędną, będzie metoda, która zastępuje metodę nadrzędną. Przykład:
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.";
}
}
Jedyny scenariusz, jaki mogę sobie wyobrazić, w którym musiałbyś wywołać metodę nadrzędną bezpośrednio poza metodą nadpisującą, byłby taki, gdyby robili dwie różne rzeczy i wiedziałeś, że potrzebujesz wersji metody nadrzędnej, a nie lokalnej. Nie powinno tak być, ale gdyby tak się stało, czystym sposobem podejścia do tego byłoby utworzenie nowej metody o nazwie takiej jak w get_parentSpecies()przypadku, gdy wszystko, co robi, to wywołanie metody nadrzędnej:
function get_parentSpecies(){
parent::get_species();
}
Ponownie, dzięki temu wszystko jest ładne i spójne, pozwalając na zmiany / modyfikacje metody lokalnej zamiast polegania na metodzie nadrzędnej.
$leg = new leg()wnętrzehuman, jak nazwałbym funkcje ludzkie z wnętrza instancji nogi$leg?