PHP Учебник

PHP Старт Введение в PHP Установка PHP Синтаксис PHP Комментарии в PHP Переменные PHP PHP Echo / Print Типы данных PHP Строки PHP Числа PHP Математика в PHP Константы PHP Операторы PHP PHP If...Else...Elseif PHP Switch Циклы в PHP Функции PHP Массивы PHP PHP Суперглобальные PHP RegEx

PHP Формы

Обработка форм PHP Валидация форм PHP Обязательные поля Валидация URL/E-mail Полная форма PHP

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

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

PHP OOP

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

База данных MySQL

База данных MySQL Подключение к MySQL Создание БД MySQL Создание таблицы MySQL Вставка данных MySQL Получить ID MySQL Подготовленные операторы PHP MySQL Получение данных MySQL Предложение WHERE Предложение ORDER BY Обновление данных MySQL Удаление данных БД MySQL Limit Data

PHP XML

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

PHP - AJAX

AJAX Введение AJAX PHP AJAX База Данных AJAX XML AJAX Живой поиск AJAX Опрос

PHP Примеры

PHP Примеры Практика ООП PHP PHP квиз-тест Упражнения Базовый PHP Упражнения Алгоритмы Упражнения Массивы Упражнения Цикл for Упражнения Функции Регулярные выражения Упражнения Дата PHP Упражнения Строки PHP Математика PHP Упражнения Формы PHP Упражнения Классы PHP Упражнения JSON PHP PHP Задачник


Полиморфизм в ООП на PHP




В этом уроке мы узнаем о « полиморфизме» (греч. «Множество форм») — соглашении об именах, которое может помочь нам написать код, который будет намного более последовательным и простым в использовании. Согласно принципу полиморфизма, методы в разных классах, которые делают похожие вещи, должны иметь одно и то же имя.


Полиморфизм — это, по сути, шаблон ООП, который позволяет множеству классов с разными функциями выполнять или совместно использовать общий интерфейс.

В мире программирования полиморфизм используется для того, чтобы сделать приложения более модульными и расширяемыми. Вместо беспорядочных условных утверждений, описывающих различные варианты действий, вы создаете взаимозаменяемые объекты, которые выбираете в зависимости от ваших потребностей. Это основная цель полиморфизма.

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

Например, мы можем вызвать метод, который вычисляет площадь calcArea(), и решить, что мы помещаем в каждый класс, представляющий фигуру, метод с этим именем, который вычисляет площадь в соответствии с формой. Теперь, когда бы мы ни захотели вычислить площадь для различных фигур, мы будем вызывать метод с именем calcArea(), не уделяя слишком много внимания техническим деталям того, как фактически вычислить площадь для различных фигур. Единственное, что нам нужно знать, это имя метода, вычисляющего площадь.

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

В приведенном ниже примере интерфейс с именем Shape фиксирует все классы, реализующие его, для определения абстрактного метода с именем calcArea():

Пример

<?php
interface Shape {
  public function calcArea();
}
?>

Соответственно, класс Circle реализует интерфейс, помещая в метод calcArea() формулу, вычисляющую площадь кругов:

Пример

<?php
class Circle implements Shape {
  private $radius;
   
  public function __construct($radius)
  {
    $this -> radius = $radius;
  }
  
  // calcArea вычисляет площадь круга 
  public function calcArea()
  {
    return $this -> radius * $this -> radius * pi();
  }
}
?>

Класс Rectangle также реализует интерфейс Shape, но определяет метод

calcArea()

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

Пример

<?php
class Rectangle implements Shape {
  private $width;
  private $height;
   
  public function __construct($width, $height)
  {
    $this -> width = $width;
    $this -> height = $height;
  }
  
  // calcArea вычисляет площадь прямоугольников   
  public function calcArea()
  {
    return $this -> width * $this -> height;
  }
}
?>

Теперь мы можем создавать объекты из конкретных классов:

Пример

<?php
$circ = new Circle(3);
$rect = new Rectangle(3,4);
?>

Мы можем быть уверены, что все объекты вычисляют площадь с помощью метода calcArea(), будь то прямоугольный объект или круговой объект (или любая другая форма), если они реализуют интерфейс Shape.

Теперь мы можем использовать методы calcArea() для вычисления площади фигур:

<?php
interface Shape {
  public function calcArea();
}
class Circle implements Shape {
  private $radius;
   
  public function __construct($radius)
  {
    $this -> radius = $radius;
  }
  
  // calcArea вычисляет площадь круга
  public function calcArea()
  {
    return $this -> radius * $this -> radius * pi();
  }
}
class Rectangle implements Shape {
  private $width;
  private $height;
   
  public function __construct($width, $height)
  {
    $this -> width = $width;
    $this -> height = $height;
  }
  
  // calcArea вычисляет площадь прямоугольников   
  public function calcArea()
  {
    return $this -> width * $this -> height;
  }
}
$circ = new Circle(3);
$rect = new Rectangle(3,4);

echo $circ -> calcArea();
echo $rect -> calcArea();
?>

Результат выполнения кода:

28.274333882308
12

В этом уроке мы узнали, как реализовать принцип полиморфизма в PHP. Кликните здесь, чтобы попрактиковаться в предмете.