Приклад
interface Shape {
area(): float;
}
class Circle implements Shape {
area(): float { return M_PI * $this->r ** 2; }
}
class Square implements Shape {
area(): float { return $this->side ** 2; }
}
function printArea(Shape $s): void {
echo $s->area(); // не знає, коло чи квадрат
}
Два типи
- Compile-time (статичний) — перевантаження методів (overloading). У PHP обмежено: немає справжнього overloading, але є variadic arguments
- Runtime (динамічний) — перевизначення методів (overriding) через спадкування або інтерфейси. Найпоширеніший в PHP