Вопрос проверяет понимание разницы между состоянием объекта и состоянием класса, а также знание областей применения статических членов.
Статические свойства и методы принадлежат классу, а не конкретному объекту. Они вызываются без создания экземпляра класса. Статические методы не имеют доступа к $this. Такие элементы часто используют для утилитарной логики или общего состояния.
В PHP класс может содержать свойства и методы, которые существуют на уровне класса, а не объекта.
Определение:
Статические свойства и методы — это элементы класса, которые существуют в единственном экземпляре для всего класса и вызываются без создания объекта.
Статический метод объявляется с ключевым словом static и вызывается через имя класса.
class MathHelper {
public static function sum(int $a, int $b): int {
return $a + $b;
}
}
$result = MathHelper::sum(2, 3);
Нет доступа к $this
Можно обращаться только к другим статическим членам
Не зависит от состояния объекта
Статическое свойство хранит общее состояние для всех объектов класса.
class Counter {
public static int $count = 0;
public function __construct() {
self::$count++;
}
}
Все объекты Counter работают с одним и тем же $count.
Важно понимать разницу:
Обычное свойство — у каждого объекта своё
Статическое свойство — одно на весь класс
Хелперы и утилиты
Счетчики и кеши на уровне класса
Фабричные методы
Статические члены полезны, когда логика или данные относятся к классу целиком, а не к отдельному объекту. Но ими не стоит заменять полноценные объекты.