АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP или фреймворки. Сегодня последний день для записи! Жми!
⊗ppOpIfII 43 of 107 menu
Бесплатная Тренировка Верстки. Приглашаются желающие поверстать!

Наследование от класса и реализация интерфейса

Класс может наследовать от другого класса и при этом реализовывать какой-то интерфейс. Рассмотрим на практическом примере.

Пусть мы хотим сделать класс Programmer, у которого будет имя, зарплата и список языков, которые знает программист.

Пока наше описание класса весьма расплывчато: да, в классе будет имя, зарплата, языки - но какие методы будут в нашем классе?

Давайте более точно опишем наш класс с помощью интерфейса iProgrammer:

<?php interface iProgrammer { public function __construct($name, $salary); public function getName(); public function getSalary(); public function getLangs(); public function addLang($lang); } ?>

Пусть мы покопались в уже реализованных нами классах и, оказывается, у нас уже есть похожий класс Employee. Он реализует не все методы класса Programmer, но часть. Вот код уже существующего у нас класса:

<?php class Employee { private $name; private $salary; public function __construct($name, $salary) { $this->name = $name; $this->salary = $salary; } public function getName() { return $this->name; } public function getSalary() { return $this->salary; } } ?>

Логично в нашем случае сделать так, чтобы наш новый класс Programmer унаследовал часть необходимых себе методов от класса Employee (а часть мы потом реализуем уже в самом новом классе):

<?php class Programmer extends Employee { } ?>

При этом нам известно, что класс Pogrammer должен реализовывать интерфейс iProgrammer:

<?php class Programmer implements iProgrammer { } ?>

Давайте совместим наследование от класса Employee и реализацию интерфейса iProgrammer:

<?php class Programmer extends Employee implements iProgrammer { } ?>

Получится, что наш класс Pogrammer унаследует от класса Employee методы __construct, getName и getSalary, а методы addLang и getLangs нам придется реализовать:

<?php class Programmer extends Employee implements iProgrammer { public function addLang($lang) { // реализация } public function getLangs() { // реализация } } ?>

Интерфейсу iProgrammer все равно, родные методы у класса или унаследованные - главное, чтобы все описанные методы были реализованы.

Скопируйте код моего класса Employee и код интерфейса iProgrammer. Не копируйте мою заготовку класса Programmer - не подсматривая в мой код реализуйте этот класс самостоятельно.