Полиморфизм в ООП на 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();
?>
Результат выполнения кода:
12
Вывод
В этом уроке мы узнали, как реализовать принцип полиморфизма в PHP. Кликните здесь, чтобы попрактиковаться в предмете.