Когда использовать статический модификатор в PHP - PullRequest
35 голосов
/ 22 августа 2009

В последнее время, делая несколько обзоров кода, я наткнулся на несколько классов, в которых есть значительное количество статических методов ... и я не могу понять, почему? Отсюда и мой вопрос:

Каковы лучшие практики использования статических методов в PHP?

Когда кто-то захочет их использовать, а когда не стоит их использовать?

В чем особая разница в том, как среда выполнения обрабатывает статические методы? Они влияют на производительность или объем памяти?

Ответы [ 7 ]

23 голосов
/ 22 августа 2009

В последнее время, делая несколько проверок кода, я наткнулся на несколько классов, в которых есть значительное количество статических методов ... и я не могу понять, почему

В PHP не было пространств имен до 5.3, поэтому все функции / переменные были бы в глобальной области видимости, если бы они не принадлежали какому-либо классу. Помещение их в класс в качестве статических членов - это обходной путь для отсутствия пространств имен (и, вероятно, поэтому вы видели их в «значительном» числе)

Как правило, они используются для функций, которые не очень полезны в отдельных объектах, но имеют некоторое применение на уровне класса (как сказано в других ответах)

6 голосов
/ 13 января 2012

Лучшая практика - избегать их использования, когда это возможно, потому что они убивают тестируемость и ремонтопригодность. Два отличных чтения, которые уточняют:

РАЗЪЯСНЕНИЕ: Похоже, существует много недоразумений по этому вопросу. Отсутствие внедрения зависимости является реальной проблемой. Прямой вызов статических методов как раз и является одним из самых распространенных способов попасть в эту ловушку.

5 голосов
/ 22 августа 2009

Статические методы используются для

  • функции, которые относятся ко всей коллекции объектов данного класса (например, шаблон с одним узлом )
  • функции, которые не связаны ни с чем, но должны быть помещены в класс из-за ОО (например, служебные классы)
4 голосов
/ 22 августа 2009

Статический метод не требует экземпляра (и может вместо него вернуть) и более или менее похож на глобальную функцию, за исключением того, что он помещается в пространство имен класса (и, следовательно, избегает конфликтов с другими функциями) и имеет доступ к классу 'частные участники.

Итак, используйте его всякий раз, когда вас интересуют эти свойства функции.

3 голосов
/ 22 августа 2009

В использовании статических методов нет ничего специфичного для PHP.

Статические методы можно вызывать непосредственно в классе - нет необходимости в экземпляре объекта.

Таким образом, их основное использование для методов, которые связаны с функциональностью классов, но не нуждаются в существующем экземпляре для использования в другом коде.

Типичным примером может служить пользовательский метод сравнения, который можно передать, скажем, в функцию uasort () для сортировки массива объектов типа «класс».

2 голосов
/ 05 сентября 2012

вы можете использовать статические методы для лучшей производительности. вам не нужно создавать объект для каждого пользователя, который использует ваше веб-приложение и создает объект с несколькими методами и свойствами медленнее и требует гораздо больше системных ресурсов.

1 голос
/ 22 августа 2009

Вам не нужно создавать экземпляр класса, чтобы использовать его статические методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...