Назад к вопросам
Middle
153
questionbank
Что такое self и static в PHP и как они используются?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Self ссылается на текущий класс, в котором определен код. Static ссылается на класс, который был фактически вызван во время выполнения.
<?php
class MyClass {
public static function myStaticMethod() {
// Здесь self:: ссылается на MyClass
echo self::class . "::myStaticMethod() called\n";
}
public static function delegatedStaticMethod() {
// Здесь static:: ссылается на MyClass или на дочерний класс, который вызвал метод
echo static::class . "::delegatedStaticMethod() called\n";
self::myStaticMethod(); // Вызывает метод из MyClass
}
}
class MyChildClass extends MyClass {
public static function anotherStaticMethod() {
// Здесь static:: ссылается на MyChildClass
echo static::class . "::anotherStaticMethod() called\n";
self::myStaticMethod(); // Все еще вызывает метод из MyClass
}
}
MyClass::myStaticMethod(); // MyClass::myStaticMethod() called
MyClass::delegatedStaticMethod(); // MyClass::delegatedStaticMethod() called, MyClass::myStaticMethod() called
MyChildClass::delegatedStaticMethod(); // MyChildClass::delegatedStaticMethod() called, MyClass::myStaticMethod() called
MyChildClass::anotherStaticMethod(); // MyChildClass::anotherStaticMethod() called, MyClass::myStaticMethod() called
?>
| Ключевое слово | Привязка | Используется для |
|---|---|---|
self |
Название текущего класса (привязка на этапе компиляции) | Доступ к статическим свойствам, константам и методам текущего класса. |
static |
Название класса, вызвавшего метод (позднее статическое связывание) | Доступ к статическим свойствам, константам и методам в контексте вызвавшего класса (может быть дочерним). |
Основное отличие заключается в позднем статическом связывании (static), которое позволяет наследованию переопределять статическое поведение, тогда как self всегда ссылается на класс, где код был определен.