Классы и объекты в PHP: Интерфейсы. Часть 7

Классы и объекты в PHP: Интерфейсы. Часть 7

Интерфейсы чем-то похожи на абстрактные классы. Однако есть существенные различия. Как известно, абстрактный класс позволяет свободно создавать свойства и методы, как в обычном классе. Также в нем можно прописать пустые методы объявленные абстрактными (шаблоны). В интерфейсе вы сможете только перечислить список методов, которые обязательно должны присутствовать в классе, который его подключает.

Таким образом интерфейс - это чистой воды шаблон, список обязательных методов, которым должен обладать класс.

Важные замечания по интерфейсам.

  • Интерфейс может содержать только объявления методов с уровнем доступа public, но не тела этих методов. Также интерфейсы работают с константами.
  • Любой класс подключенный к интерфейсу обязательно должен реализовать все его методы. Это правило можно обойти если подключать абстрактный класс к интерфейсу
  • Интерфейсы могут наследовать друг друга за счет extends
  • Класс может одновременно расширять суперкласс и подключать к себе интерфейсы

Посмотрите на этот пример:

//создали интерфейс за счет interface и определили обязательный метод boldread()
interface GShop {
public function boldread($str);
}

//подцепили класс к интерфейсу за счет implements и реализовали обязательный метод boldread()
class GPhone implements GShop {
function boldread($str) {return '<b>'.$str.'</b>';}
}

//вывели значение
$GPhone = new GPhone;
echo $GPhone->boldread('Текст');

Из комментариев ясно, что для создания интерфейсов достаточно использовать команду interface. А для подключения класса к нему - implements.

Если же вы хотите расширить суперкласс и подключить несколько интерфесов, то пишите так: class Toyota extends Auto implements Type, Price {}

Давайте рассмотрим еще один пример, в котром интерфейсы наследуют друг друга:

//создали интерфейс Tapok
interface Tapok {
public function cenatapok($str);
}

//создали интерфейс Sapog и наследовали методы от интерфейса Tapok. Если бы был еще интерфейс Tyfli, то можно было бы подключиться и к нему так: interface Sapog extends Tapok, Tyfli {}
interface Sapog extends Tapok {
public function cenasapog($str);
}

//подцепили класс к интерфейсу Sapog и автоматом к Tapok
//теперь обязаны реализовать оба метода cenatapok() и cenasapog()
class MyObyv implements Sapog {
function cenatapok($str) {return $str;}
function cenasapog($str) {return $str;}
}

Интерфейсы могут служить "обязательными полями", чтобы программист знал, какие методы требует от него программа.

Когда использовать интерфейсы, а когда абстрактные классы?

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

| | Классы и объекты в PHP: Интерфейсы. Часть 7 | Интерфейсы чем-то похожи на абстрактные классы. Однако есть существенные различия. Как известно, абстрактный класс позволяет свободно создавать свойст | http://blogprogram.ru/wp-content/uploads/2017/06/703-131x131.jpg