Sobes.tech
Назад к вопросам
Junior — Middle
98

Чем отличаются ключевые слова self:: и static:: в контексте вызова методов и свойств в PHP?

Компании, где спрашивали
ООО Иксстек
ООО Финтех
LaTech
Tilda

Ответ от нейросети

sobes.tech AI

В PHP ключевые слова self:: и static:: используются для доступа к методам и свойствам внутри класса, но имеют разные семантики:

  • self:: — обращается к методу или свойству именно того класса, где написан код, игнорируя наследование. Это статический вызов, привязанный к текущему классу.

  • static:: — позднее статическое связывание (late static binding). При вызове из наследника static:: ссылается на класс, из которого был вызван метод, то есть учитывает наследование.

Пример:

class A {
    public static function who() {
        echo "Класс A\n";
    }
    public static function test() {
        self::who();    // всегда вызовет A::who()
        static::who();  // вызовет метод класса, который вызвал test()
    }
}

class B extends A {
    public static function who() {
        echo "Класс B\n";
    }
}

B::test();

Вывод будет:

Класс A
Класс B

Это показывает, что self:: жестко привязан к классу A, а static:: учитывает наследование и вызывает метод класса B.