Полиморфизм - способность объектов разных классов обрабатывать одно и то же сообщение по-своему:
interface NotificationChannel {
public function send(string $message): void;
}
class EmailChannel implements NotificationChannel {
public function send(string $message): void {
mail($this->to, 'Notification', $message);
}
}
class SlackChannel implements NotificationChannel {
public function send(string $message): void {
$this->api->post($this->webhook, $message);
}
}
// Полиморфный вызов - код не знает конкретный тип
function notify(NotificationChannel $channel, string $msg): void {
$channel->send($msg); // разное поведение
}Реализуется через интерфейсы (наиболее правильно) и наследование с переопределением методов.