Інтерфейси в php

Інтерфейс в PHP - це список методів, які повинні бути реалізовані в спадщини інтерфейс класі. Звертаю увагу, інтерфейс - це лише список методів.

Для створення інтерфейсу в PHP використовують слово interface. за ним йде ім'я інтерфейсу, потім в круглих дужках список методів.

Інтерфейс може бути реалізований в класі, правильно використовувати саме це слово - "реалізований", а не слово "успадкований".

Якщо ви хочете в якомусь класі реалізувати інтерфейс, то для цього використовується ключове слово implements. яке з англійської перекладається як "реалізує".

Якщо в цьому прикладі з класу Boing прибрати один з методів, то це призведе до помилки "Fatal error: Class Boing contains 1 abstract method and must therefore be declared abstract or implement the remaining methods.".

Клас Boing може містити й інші методи, але він зобов'язаний реалізовувати методи, прописані в інтерфейсі.

Інтерфейси дуже схожі на абстрактні класи в PHP. але на відміну від них інтерфейси не містять методів з тілами, а являють собою лише список методів, який повинен бути реальзован в класі, що реалізує цей інтерфейс.

У інтерфейсах все методи фактично є абстрактними, при цьому ключове слово abstract при завданні методів в інтерфейсі не використовується.

Методи в інтерфейсах можуть бути тільки з областю видимості public. абстрактні класи дозволяють оголошувати різні ідентифікатори доступу. Сама назва інтерфейсів говорить про те, що вони задають інтерфейс управління, тому методи в них тільки публічні.

Інтерфейси в PHP крім списку методів, також можуть містити константи.

Вам повинно бути відомо, що в PHP множинного спадкоємства немає, тобто один клас може успадковувати тільки один клас. Але інтерфейси в PHP дозволяють робити множинну реалізацію, тобто один клас може реалізовувати декілька інтерфейсів.

Ось приклад реалізації в класі Boing двох інтерфейсів:

Ми бачимо що реалізуються інтерфейси просто перечеслять через кому:

Але користь від інтерфейсів не тільки в тому, що вони визначають набір публічних методів, який повинен бути в реалізують класах. Це безумовно дуже корисно при роботі команди програмістів над великим проектом.

У інтерфейсів є ще одна корисна властивість, вони привласнюють об'єктів додатковий тип.

Давайте розширимо цей приклад і за допомогою оператора instanceof перевіримо тип створеного об'єкта $ Boing777.

Ми бачимо, що умова if виповнилося всі чотири рази, а значить об'єкт $ Boing777 відноситься до всіх чотирьох типів.

Філософія інтерфейсів і абстрактних класів

Ви вже знаєте, що в PHP є два типи сутностей: інтерфейси і абстрактні класи. Вони дуже схожі, але крім технічних відмінностей, потрібно розуміти різницю в ідеології їх використання.

Інтерфейси призначені для опису дій, які може зробити об'єкт.

Абстрактний клас описує клас сутностей в цілому, наприклад автомобілі. За допомогою абстрактного класу можна вказати, що автомобілі мають колір, виробника, потужність, можуть їздити, сигналити і т.д. А інтерфейс призначений тільки для опис методів управління, тобто в разі автомобіля це: газувати, гальмувати, сигналити, включити фари і т.д.

Схожі статті