When to choose abstract class vs interface
- Abstract class — when subclasses share code (shared logic) and have an "is-a" relationship. Cannot implement multiple
- Interface — when a contract without implementation is needed; a class may implement multiple interfaces
Example
abstract class Shape {
abstract public function area(): float;
public function describe(): string {
return "Area: " . $this->area(); // shared code
}
}
class Circle extends Shape {
public function area(): float { return M_PI * $this->r ** 2; }
}