Є три сценарії (які я можу придумати), коли ви викликали б метод у підкласі, де метод виходить із батьківського класу:
Метод не перезаписується підкласом, він існує лише в батьківському.
Це те саме, що і ваш приклад, і загалом краще скористатися. $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?