Junior — Middle
PHP-də metod və xüsusiyyət çağırış kontekstində self:: və static:: açar sözləri arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
В 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.