Різниця self vs static
class Base {
public static function create(): static {
return new static(); // клас, на якому викликали
}
public static function name(): string {
return static::class; // Late Static Binding
}
}
class Child extends Base {}
Child::create(); // повертає Child, не Base
Child::name(); // "Child", не "Base"
Де використовується
- Fluent interfaces і Builder-патерни, що повертають
static
- ActiveRecord-стиль:
User::find(1) повертає User, а не базовий клас
- Статичні фабричні методи в ієрархіях