Полный цикл в digital

Интерфейсы

Интерфейс определяет абстрактный дизайн, которому должен соответствовать применяющий его класс. Интерфейс определяет методы без реализации. А класс затем применяет интерфейс и реализует эти методы. Применение интерфейса гарантирует, что класс имеет определенный функционал, описываемый интерфейсом.

Интерфейс определяется с помощью ключевого слова interface, за которым следует имя интерфейса и блок кода интерфейса в фигурных скобках:

interface iMessenger {
}

Здесь определен интерфейс iMessenger. Обычно имя интерфейса начинается со строчной буквы i, но это условность.

Внутри блока интерфейса в фигурных скобках определяются сигнатуры методов. Причем все эти методы могут быть только публичными, то есть с модификатором public, либо без модификатора доступа (что аналоично модификатору public):

interface iMessenger {
function send();
}

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

Для реализации классом интерфейса применяется ключевое слово implements, после которого указывается имя применяемого интерфейса:

<?
interface iMessenger {
function send();
}
class EmailMessenger implements iMessenger {
function send() {
echo "Отправка сообщения на e-mail";
}
}
$outlook = new EmailMessenger();
$outlook->send();

В данном случае класс EmailMessenger реализует интерфейс iMessenger. Если класс применяет интерфейс, то он должен реализовать все методы этого интерфейса. Так, в данном случае класс EmailMessenger определяет метод send() с некоторой реализацией.

Интерфейсы также могут наследоваться от других интерфейсов:

<?
interface iMessenger {
function send();
}
interface iEmailMessenger extends iMessenger {
}
class SimpleEmailMessenger implements iEmailMessenger {
function send() {
echo "Отправка сообщения на email.";
}
}
$outlook = new SimpleEmailMessenger();
$outlook->send();

Когда нам могут понадобиться интерфейсы? Интерфейс - это контракт, который говорит, что класс обязательно реализует определенный функционал. И мы можем использовать это в своей программе. Например, определим следующий код:

<?
interface iMessenger {
function send($message);
}
function sendMessage(iMessenger $messenger, $text) {
$messenger->send($text);
}
class EmailMessenger implements iMessenger {
function send($message) {
echo "Отправка сообщения на email: $message";
}
}
$outlook = new EmailMessenger();
sendMessage($outlook, "Hello World");

Для отправки сообщения здесь определена функция sendMessage(), которая в качестве первого параметра принимает объект мессандера, а в качестве второго параметра - отправляемый текст. Причем определение первого параметра говорит, что передаваемое этому параметру значение должно реализовать интерфейс iMessenger. В самой функции мы знаем, что первый параметр - это объект, который обязательно реализует интерфейс iMessenger, поэтому мы можем вызвать у него метод send() для отправки сообщения:

function sendMessage(iMessenger $messenger, $text) {
$messenger->send($text);
}

Множественное применение интерфейсов

Класс может одновременно применять сразу несколько интерфейсов. В этом случае все интерфейсы перечисляются через запятую после слова implements. А класс должен реализовать методы всех применяемых интерфейсов:

<?
interface iCamera {
function makeVideo();
function makePhoto();
}
interface iMessenger {
function sendMessage($message);
}
class Mobile implements iCamera, iMessenger{
function makeVideo() { 
echo "Запись видео";
}
function makePhoto() { 
echo "Съемка фото";
}
function sendMessage($message) {
echo "Отправка сообщения $message";
}
}
$iphone12 = new Mobile();
$iphone12->makePhoto();
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг