Полиморфизм — это одна из ключевых концепций ООП (объектно-ориентированного программирования), которая позволяет объектам разного типа использовать один и тот же интерфейс. Это значит, что один метод может работать с разными типами данных, но при этом давать корректный результат.
🚩Зачем нужен полиморфизм?
🟠Гибкость кода
можно легко заменять одни классы другими, не меняя общий код.
🟠Упрощение поддержки
код становится понятнее и легче для расширения.
🟠Сокращение дублирования
один общий интерфейс может использоваться разными классами.
🚩Виды полиморфизма
Полиморфизм через наследование (override, переопределение методов)
Полиморфизм через интерфейсы (реализация одного интерфейса разными классами)
🚩Полиморфизм через наследование
Допустим, у нас есть базовый класс
Animal, у которого есть метод makeSound(). Разные животные будут издавать разные звуки, но все они будут использовать этот метод. class Animal {
public function makeSound() {
return "Some sound";
}
}
class Dog extends Animal {
public function makeSound() {
return "Woof!";
}
}
class Cat extends Animal {
public function makeSound() {
return "Meow!";
}
}
function printSound(Animal $animal) {
echo $animal->makeSound() . PHP_EOL;
}
printSound(new Dog()); // Выведет "Woof!"
printSound(new Cat()); // Выведет "Meow!"🚩Полиморфизм через интерфейсы
Иногда классы не связаны через наследование, но должны поддерживать общий метод. Для этого используется интерфейс:
interface Shape {
public function getArea(): float;
}
class Circle implements Shape {
private $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function getArea(): float {
return pi() * $this->radius * $this->radius;
}
}
class Rectangle implements Shape {
private $width, $height;
public function __construct($width, $height) {
$this->width = $width;
$this->height = $height;
}
public function getArea(): float {
return $this->width * $this->height;
}
}
function printArea(Shape $shape) {
echo "Площадь: " . $shape->getArea() . PHP_EOL;
}
printArea(new Circle(5)); // Выведет площадь круга
printArea(new Rectangle(4, 6)); // Выведет площадь прямоугольникаСтавь 👍 и забирай 📚 Базу знаний