Оглавление

31.3. Наследование

Предположим, у нас есть класс (например, Сlass1). С помощью наследования мы можем создать новый класс (например, Сlass2), в котором будет доступ ко  всем  свойствам  и  методам  класса  Сlass1,  а  также  к  некоторым  новым свойствам и методам.

class Class1 {
   public function f_print() {
      echo 'Метод f_print класса Class1<br>';
   }
   public function f_display() {
      echo 'Метод f_display класса Class1<br>';
   }
}

 

class Class2 extends Class1 {
   public function f_new() {
      echo 'Метод f_new класса Class2<br>';
   }
}

 

Ключевое слово extends указывает, что класс Class2 наследует все свойства и методы класса Class1.

$obj = new Class2();
$obj->f_new();
$obj->f_print();
$obj->f_display();


Выведенный этим примером код HTML будет отображен Web-браузером так:
Функция f_new класса Class2
Функция f_print класса Class1
Функция f_display класса Class1
Если  имя  функции  в  классе  Class2  совпадает  с  именем  функции  класса Class1, то будет использоваться функция из класса Class2:

class Class2 extends Class1 {
   public function f_new() {
      echo 'Метод f_new класса Class2<br>';
   }
   public function f_display() {
      echo 'Привет';
   }
}

$obj = new Class2();
$obj->f_display();


Этот пример выведет Привет, а не Метод f_display класса Class1.


Чтобы использовать метод, объявленный в родительском классе, следует вызвать его с помощью ключевого слова parent. Пример:

class Class1 {
   public function f_display() {
      echo 'Метод f_display класса Class1<br>';
   }
}
class Class2 extends Class1 {
   public function f_display() {
      parent::f_display();
      echo 'Привет';
   }
}
$obj = new Class2();
$obj->f_display();


Выведет:
Метод f_display класса Class1
Привет

 

В  некоторых  случаях  необходимо  запретить  переопределение  метода.  Для этого перед определением метода следует указать ключевое слово final:

class Class1 {
   final public function f_display() {
      echo 'Метод f_display класса Class1<br>';
   }
}
class Class2 extends Class1 {
   public function f_display($msg) {
      echo $msg;
   }
}
$obj = new Class2();


Так  как  перед методом f_display()  в  классе Class1  стоит  ключевое  слово final, интерпретатор выведет сообщение об ошибке:
Fatal error: Cannot override final method Class1::f_display()

Примечания:
  • Конструктор и деструктор в родительском классе автоматически не вызываются. Для их вызова также необходимо использовать ключевое слово parent.
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити