Назад к вопросам
Middle
98
questionbank

Как реализуется полиморфизм в PHP?

Sobes Copilot

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

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

sobes.tech AI

Полиморфизм в PHP реализуется через:

  1. Наследование классов: Дочерние классы могут переопределять методы родительских классов.
  2. Интерфейсы: Классы, реализующие один и тот же интерфейс, должны иметь определенные методы, но их реализация может отличаться.
  3. Трейты: Методы разных трейтов, используемых в одном классе, могут выполнять схожие задачи, но иметь разную внутреннюю логику.

Пример полиморфизма через наследование:

<?php
class Animal {
    public function sound() {
        return "Неизвестный звук";
    }
}

class Dog extends Animal {
    public function sound() {
        return "Гав!"; // Переопределение метода
    }
}

class Cat extends Animal {
    public function sound() {
        return "Мяу!"; // Переопределение метода
    }
}

function makeAnimalSound(Animal $animal) {
    echo $animal->sound() . "\n";
}

$dog = new Dog();
$cat = new Cat();

makeAnimalSound($dog); // Выводит "Гав!"
makeAnimalSound($cat); // Выводит "Мяу!"

Пример полиморфизма через интерфейсы:

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

class Circle implements Shape {
    private $radius;

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

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

class Square implements Shape {
    private $side;

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

    public function getArea() {
        return $this->side * $this->side;
    }
}

function printArea(Shape $shape) {
    echo "Площадь: " . $shape->getArea() . "\n";
}

$circle = new Circle(5);
$square = new Square(4);

printArea($circle); // Выводит площадь круга
printArea($square); // Выводит площадь квадрата