Подтвердить что ты не робот

Когда использовать статический модификатор в PHP

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

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

Когда вы хотите использовать их и когда их не следует использовать?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

  • которые связаны со всей совокупностью объектов данного класса (например, singleton pattern)
  • которые не связаны ни с чем, но должны быть помещены под класс из-за OO (например, служебных классов)

Ответ 3

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

ПОДТВЕРЖДЕНИЕ: По этому вопросу, похоже, много недоразумений. Отсутствие инъекции зависимостей является реальной проблемой. Прямо вызов статических методов просто является одним из наиболее распространенных способов попадания в эту ловушку.

Ответ 4

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

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

Ответ 5

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

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

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

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

Ответ 6

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

Ответ 7

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