Классы и объекты в PHP: Полиморфизм

Классы и объекты в PHP: Полиморфизм

04.04.2023
152
В PHP полиморфизм позволяет использовать одно и то же имя метода в разных классах, что может быть очень полезно при создании библиотек и фреймворков.

Полиморфизм в PHP

Полиморфизм в PHP позволяет использовать одно и то же имя метода в разных классах, но с разными реализациями. Это означает, что если у нас есть несколько классов, которые наследуют один и тот же метод, то мы можем вызвать этот метод для каждого из этих классов, и метод будет работать по-разному в зависимости от класса.

Например, у нас есть классы "Circle" и "Rectangle", которые наследуют метод "area". Если мы вызовем метод "area" для объекта класса "Circle", то метод вычислит площадь круга, а если мы вызовем метод "area" для объекта класса "Rectangle", то метод вычислит площадь прямоугольника.

Пример использования полиморфизма в PHP

Для лучшего понимания полиморфизма в PHP, рассмотрим пример. Пусть у нас есть класс "Shape", который содержит метод "area", а также классы "Circle" и "Rectangle", которые наследуют класс "Shape" и переопределяют метод "area".

class Shape {
  // метод возвращает 0, его реализация будет переопределена в дочерних классах
  public function area() {
    return 0;
  }
}

class Circle extends Shape {
  private $radius; // радиус круга

  // конструктор, принимающий радиус круга
  public function __construct($radius) {
    $this->radius = $radius;
  }

  // переопределение метода area для класса Circle
  public function area() {
    return pi() * pow($this->radius, 2);
  }
}

class Rectangle extends Shape {
  private $width; // ширина прямоугольника
  private $height; // высота прямоугольника

  // конструктор, принимающий ширину и высоту прямоугольника
  public function __construct($width, $height) {
    $this->width = $width;
    $this->height = $height;
  }

  // переопределение метода area для класса Rectangle
  public function area() {
    return $this->width * $this->height;
  }
}

В этом примере мы создали класс "Shape", который содержит метод "area", а также классы "Circle" и "Rectangle", которые наследуют класс "Shape" и переопределяют метод "area". В классе "Circle" метод "area" вычисляет площадь круга, а в классе "Rectangle" метод "area" вычисляет площадь прямоугольника.

Теперь мы можем создать объекты классов "Circle" и "Rectangle" и вызвать метод "area" для каждого объекта, и метод будет работать по-разному в зависимости от класса:

$circle = new Circle(5);
echo 'Площадь круга: ' . $circle->area();

$rectangle = new Rectangle(4, 6);
echo 'Площадь прямоугольника: ' . $rectangle->area();

Вывод на экран будет следующим:

Площадь круга: 78.539816339745
Площадь прямоугольника: 24

Заключение

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