Back to questions
Junior — Middle
97
Чем отличаются ключевые слова self:: и static:: в контексте вызова методов и свойств в PHP?
Companies where asked
ООО Иксстек
ООО Финтех
LaTech
Tilda
Answer from AI
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.