Пример
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