Middle
63
questionbank

В чем отличие между self и static в PHP?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

self ссылается на текущий класс на этапе компиляции (compile time), а static ссылается на класс, который был вызван в момент выполнения (runtime). Это особенно важно при работе с наследованием и поздним статическим связыванием.

Пример с self:

php

Пример с static (позднее статическое связывание):

php

Разница заключается в том, как определяется конечный класс, метод которого будет вызван. self "закрепляется" на этапе компиляции за классом, в котором он написан. static позволяет отложить определение до выполнения, используя класс, из которого был сделан вызов.

Таблица для сравнения:

Особенностьselfstatic (Позднее статическое связывание)
Время связыванияCompile time (на этапе компиляции)Runtime (на этапе выполнения)
Ссылка на классКласс, в котором написано self::Класс, который был вызван
Поведение при наследованииНе учитывает переопределение в дочерних классахУчитывает переопределение в дочерних классах