В этой части учебника рассказывается как работают в PHP интерфейсы и абстрактные классы, это не сильно важная тема, но всё же её знать надо.
Абстрактные классы:
По сути абстрактный класс, это шаблон класса, к примеру, это полезно когда вы точно не знаете какой код вы будите использовать внутри какого либо метода, вот пример программы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Создаём абстрактный класс DefaultUser abstract class DefaultUser { public $name; // Имя public $surname; // Фамилия public $status; // Статус // Обычный метод для вывода имени public function show_name () { echo "Имя: " . $this -> name . "</br>"; echo "Фамилия: " . $this -> surname . "</br>"; echo "Статус: " . $this -> status . "</br>"; } // Абстрактный метод для вывода класса abstract public function show_class (); } |
Тут кода совсем не много, чтобы вам объявить абстрактный класс и метод, нужно использовать ключевое слово abstract
, перед словом class
и перед областью видимости в методе соответственно.
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 32 33 34 35 36 37 38 39 40 41 | // Создаём наследуемый класс User class User extends DefaultUser { // Конструктор класса public function __construct ($name, $surname) { $this -> name = $name; $this -> surname = $surname; $this -> status = "Обычный человек"; } // Метод для вывода имени public function show_name () { parent::show_name(); } // Абстрактный метод, абстрактного класса public function show_class () { echo "Это класс обычного пользователя</br>"; } } // Создаём наследуемый класс Admin class Admin extends DefaultUser { // Конструктор класса public function __construct ($name, $surname) { $this -> name = $name; $this -> surname = $surname; $this -> status = "Админ"; } // Метод для вывода имени public function show_name () { parent::show_name(); } // Абстрактный метод, абстрактного класса public function show_class () { echo "Это класс админа</br>"; } } |
Как видите, обычный метод show_name()
, который не абстрактный, он объявляется точно также, как если мы его наследовали с не абстрактного класса, а вот абстрактный метод, мы объявляем как будто его и нет, просто делаем метод с нуля.
1 2 3 4 5 6 7 | // Создаём объект класса User $User = new User("Вова", "Пупкин"); // Создаём объект класса Admin $Admin = new Admin("Вася", "Пупкин"); $User -> show_class(); $Admin -> show_class(); |
Вот результат работы с абстрактным классов.
Как видите, мы вывели к какому классу принадлежит метод.
Интерфейсы:
Это один из элементов в ООП программирование, в том дела, что в PHP нет множественного наследования, и интерфейсы должны решить эту проблему.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // Создаём интерфейс UserShowName interface UserShowName { // Обычный метод для вывода имени public function show_name (); } // Создаём интерфейс UserShowClass interface UserShowClass { // Вывод принадлежности объекта public function show_class (); } |
Как видите для создания интерфейса надо использовать ключевое слово interface
, также важное замечании, методы интерфейса не могут иметь код, их надо только объявлять.
Теперь покажу как их наследовать.
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 | // Создаём класс User и наследуем его от интерфейсов class User implements UserShowName, UserShowClass { public $name; // Имя public $surname; // Фамилия public $status; // Статус // Конструктор класса public function __construct ($name, $surname) { $this -> name = $name; $this -> surname = $surname; $this -> status = "Обычный человек"; } // Метод для вывода имени public function show_name () { echo "Имя: " . $this -> name . "</br>"; echo "Фамилия: " . $this -> surname . "</br>"; echo "Статус: " . $this -> status . "</br>"; } // Вывод принадлежности объекта к класса public function show_class () { echo "Это класс обычного пользователя</br>"; } } |
Для наследования интерфейса используется слово implements
, их можно наследовать сколько угодно, хоть десять.
Важно:
Если вы наследуете интерфейс, то обязательно в классе должны прописан код каждого метода интерфейса, иначе будет ошибка.
Вот результат программы.
Всё хорошо работает.
Вывод:
В этой части учебник было показано, что такое в PHP 7 интерфейсы и абстрактные классы, как с ними работать.
Часть получилась не очень большая, так как, эта тема достаточна простая и рассказывать про неё практически нечего.