Учебник по PHP

PHP ГЛАВНАЯ Введение в PHP Установка PHP Синтаксис PHP Комментарии PHP PHP-переменные PHP-эхо/печать Типы данных PHP PHP-строки PHP-номера PHP-математика PHP-константы PHP-операторы PHP Если... Иначе... Иначе PHP-переключатель PHP-циклы PHP-функции PHP-массивы PHP-суперглобальные переменные PHP регулярное выражение

PHP- формы

Обработка форм PHP Проверка формы PHP Требуется PHP-форма URL-адрес формы PHP/электронная почта PHP-форма завершена

PHP продвинутый

Дата и время PHP PHP включает Обработка файлов PHP Открытие/чтение файла PHP Создание/запись файла PHP Загрузка файла PHP PHP-куки PHP-сессии PHP-фильтры Расширенные фильтры PHP Функции обратного вызова PHP PHP JSON Исключения PHP

PHP ООП

PHP Что такое ООП PHP-классы/объекты PHP-конструктор PHP-деструктор Модификаторы доступа PHP Наследование PHP PHP-константы Абстрактные классы PHP PHP-интерфейсы Особенности PHP Статические методы PHP Статические свойства PHP Пространства имен PHP Итерации PHP

База данных MySQL

База данных MySQL Подключиться к MySQL MySQL Создать БД MySQL Создать таблицу Вставка данных MySQL MySQL Получить последний идентификатор MySQL Вставить несколько MySQL подготовлен Выбор данных MySQL MySQL Где Порядок MySQL MySQL Удалить данные Данные обновления MySQL Предельные данные MySQL

PHP XML

XML-парсеры PHP Парсер PHP SimpleXML PHP SimpleXML — Получить PHP XML Expat PHP XML DOM

PHP — АЯКС

Введение в АЯКС АЯКС PHP База данных AJAX АЯКС XML AJAX-поиск в реальном времени АЯКС-опрос

Примеры PHP

Примеры PHP PHP-компилятор PHP-викторина PHP-упражнения PHP-сертификат

Справочник по PHP

Обзор PHP PHP-массив Календарь PHP Дата PHP PHP-каталог Ошибка PHP PHP-исключение Файловая система PHP PHP-фильтр PHP FTP PHP JSON Ключевые слова PHP PHP-библиотека XML PHP-почта PHP-математика PHP Разное PHP MySQLi PHP-сеть Управление выводом PHP PHP регулярное выражение PHP SimpleXML PHP-поток PHP-строка Обработка переменных PHP XML-парсер PHP PHP-архив Часовые пояса PHP

PHP ООП — Интерфейсы


PHP — что такое интерфейсы?

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

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

Интерфейсы объявляются с помощью interfaceключевого слова:

Синтаксис

<?php
interface InterfaceName {
  public function someMethod1();
  public function someMethod2($name, $color);
  public function someMethod3() : string;
}
?>

PHP — интерфейсы против абстрактных классов

Интерфейс похож на абстрактные классы. Разница между интерфейсами и абстрактными классами заключается в следующем:

  • Интерфейсы не могут иметь свойств, а абстрактные классы могут
  • Все методы интерфейса должны быть общедоступными, а методы абстрактного класса — общедоступными или защищенными.
  • Все методы в интерфейсе являются абстрактными, поэтому их нельзя реализовать в коде, а ключевое слово abstract не требуется.
  • Классы могут реализовывать интерфейс, одновременно наследуя от другого класса.

PHP — использование интерфейсов

Чтобы реализовать интерфейс, класс должен использовать implementsключевое слово.

Класс, реализующий интерфейс, должен реализовывать все методы интерфейса.

Пример

<?php
interface Animal {
  public function makeSound();
}

class Cat implements Animal {
  public function makeSound() {
    echo "Meow";
  }
}

$animal = new Cat();
$animal->makeSound();
?>

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

Используя интерфейсы, мы можем написать некоторый код, который будет работать для всех животных, даже если каждое животное ведет себя по-разному:

Пример

<?php
// Interface definition
interface Animal {
  public function makeSound();
}

// Class definitions
class Cat implements Animal {
  public function makeSound() {
    echo " Meow ";
  }
}

class Dog implements Animal {
  public function makeSound() {
    echo " Bark ";
  }
}

class Mouse implements Animal {
  public function makeSound() {
    echo " Squeak ";
  }
}

// Create a list of animals
$cat = new Cat();
$dog = new Dog();
$mouse = new Mouse();
$animals = array($cat, $dog, $mouse);

// Tell the animals to make a sound
foreach($animals as $animal) {
  $animal->makeSound();
}
?>

Объяснение примера

Cat, Dog и Mouse — все это классы, реализующие интерфейс Animal, что означает, что все они могут издавать звук с помощью makeSound()метода. Из-за этого мы можем пройтись по всем животным и попросить их издать звук, даже если мы не знаем, к какому типу относится каждое из них.

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