Коли обирати абстрактний клас vs інтерфейс
- Абстрактний клас — коли підкласи мають спільний код (shared logic), і між ними є відношення «є різновидом» (is-a). Не можна реалізувати кілька
- Інтерфейс — коли потрібен контракт без реалізації; клас може реалізовувати кілька інтерфейсів
Приклад
abstract class Shape {
abstract public function area(): float;
public function describe(): string {
return "Area: " . $this->area(); // спільний код
}
}
class Circle extends Shape {
public function area(): float { return M_PI * $this->r ** 2; }
}