PHP - Оператор parent
Войти

PHP - Оператор parent

PHP - Оператор parent

На практике подклассам бывает необходимо расширить функциональность методов родительского класса. Расширяя функциональность за счет переопределения методов суперкласса, в подклассах вы сохраняете возможность сначала выполнить программный код родительского класса, а затем добавить код, который реализует дополнительную функциональность. Давайте разберем как это можно сделать.

Чтобы вызвать нужный метод из родительского класса, вам понадобится обратиться к самому этому классу через дескриптор. Для этой цели в PHP предусмотрено ключевое слово parent. Оператор parent позволяет подклассам обращаться к методам (и конструкторам) родительского класса и дополнять их существующую функциональность. Чтобы обратиться к методу в контексте класса, используются символы "::" (два двоеточия). Синтаксис оператора parent:

1
<?php  parent::метод_родительского_класа ?>

Эта конструкция вызовет метод, определенный в суперклассе. Вслед за таким вызовом можно поместить свой программный код, который добавит новую функциональность:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php 
   
  
class book {
    public 
$title;
    public 
$price;
     
    function 
__construct($title$price) {
      
$this->title $title;
      
$this->price $price;
    }
  }
   
  class 
new_book extends book {
    public 
$pages;
     
    function 
__construct($title$price$pages) {
      
// вызываем метод-конструктор родительского класса
      
parent::__construct($title$price);
       
      
// инициализируем свойство определенное в подклассе
      
$this->pages $pages;
    }
  }
   
  
$obj = new new_book('азбука'35500);
   
  echo 
"Книга: $obj->title<br>
        Цена: 
$obj->price<br>
        Страниц: 
$obj->pages";
   
?>

Когда в дочернем классе определяется свой конструктор, PHP не вызывает конструктор родительского класса автоматически. Это необходимо сделать вручную в конструкторе подкласса. Подкласс сначала в своем конструкторе вызывает конструктор своего родительского класса, передавая нужные аргументы для инициализации, исполняет его, а затем выполняется код, который реализует дополнительную функциональность, в данном случае инициализирует свойство подкласса.

Ключевое слово parent можно использовать не только в конструкторах, но и в любом другом методе, функциональность которого вы хотите расширить, достигнуть этого можно, вызвав метод родительского класса:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php 
   
  
class Cat {
    public 
$name "Арни";
     
    function 
getstr() {
      
$str "Имя кота: {$this->name}.";
      return 
$str;
    }
  }
   
  class 
my_Cat extends Cat {
    public 
$age 5;
     
    function 
getstr() {
      
$str parent::getstr();
       
      
$str .= "<br>Возраст: {$this->age} лет.";
      return 
$str;
    }
  }
   
  
$obj = new my_Cat;
  echo 
$obj->getstr();

?>

Здесь сначала вызывается метод getstr() из суперкласса, значение которого присваивается переменной, а после этого выполняется остальной код определенный в методе подкласса.

Теперь, когда мы познакомились с основами наследования, можно, наконец, рассмотреть вопрос видимости свойств и методов.

Ссылки по теме:

  1. 1. puzzleweb.ru
Теги:
php