Чем self:: отличается от static::? (позднее статическое связывание)

Ответ

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.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.