Назад к вопросам
Junior
373
questionbank

Что такое полиморфизм?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Полиморфизм – это возможность работать с различными типами объектов, используя единый интерфейс. В контексте ООП в PHP это проявляется через:

  1. Наследование: Дочерние классы могут переопределять методы родительского класса, предоставляя собственную реализацию. При вызове этого метода на объекте дочернего класса будет выполнена его специфическая версия.
  2. Интерфейсы: Различные классы могут реализовывать один и тот же интерфейс, предоставляя специфическую реализацию методов, определенных в интерфейсе. Объекты этих классов можно рассматривать как объекты типа интерфейса, вызывая на них методы интерфейса.

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

Пример с наследованием:

<?php
class Animal {
    public function makeSound() {
        // Базовая реализация
    }
}

class Dog extends Animal {
    public function makeSound() {
        return "Гав!";
    }
}

class Cat extends Animal {
    public function makeSound() {
        return "Мяу!";
    }
}

// Работа с объектами разных классов через общий интерфейс (метод makeSound)
$animals = [new Dog(), new Cat()];

foreach ($animals as $animal) {
    echo $animal->makeSound() . "\n";
}

Пример с интерфейсом:

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

class Circle implements Shape {
    private $radius;

    public function __construct($radius) {
        $this->radius = $radius;
    }

    public function getArea() {
        return pi() * pow($this->radius, 2);
    }
}

class Square implements Shape {
    private $side;

    public function __construct($side) {
        $this->side = $side;
    }

    public function getArea() {
        return pow($this->side, 2);
    }
}

// Работа с объектами разных классов через общий интерфейс Shape
$shapes = [new Circle(5), new Square(10)];

foreach ($shapes as $shape) {
    echo "Площадь: " . $shape->getArea() . "\n";
}