self:: привязано к классу, в котором записан код. static:: привязано к классу, который вызвал метод (Late Static Binding, PHP 5.3+).
class Model {
protected static string $table = 'models';
public static function getTable(): string {
return static::$table; // берет $table из вызывающего класса
}
}
class User extends Model {
protected static string $table = 'users';
}
echo User::getTable(); // "users" (static::)
// Если бы было self::$table - вернул бы "models"LSB критически важен для паттернов Active Record, Factory Method.