Выполняя некоторые обзоры кода в последнее время, я наткнулся на несколько классов, которые имеют в них значительное количество статических методов … и я не понимаю, почему? Отсюда мой вопрос:
Каковы наилучшие методы использования статических методов в PHP?
Когда кто-то захочет их использовать и когда их не следует использовать?
Какова конкретная разница в том, как runtime обрабатывает статические методы? Они влияют на производительность или объем памяти?
Выполняя некоторые обзоры кода в последнее время, я столкнулся с рядом классов, которые имеют в них значительное количество статических методов … и я не могу понять, почему
У PHP не было пространств имен до 5.3, поэтому все функции / переменные были бы в глобальной области видимости, если бы они не принадлежали к некоторому классу. Помещение их в класс как статические члены – это обходное решение для отсутствия пространств имен (и, вероятно, поэтому вы видели их в «значительном» числе)
Как правило, они используются для функций, которые не очень полезны для отдельных объектов, но некоторые используют на уровне класса (как сказано в других ответах)
Статические методы используются для
Лучшая практика – избегать использования их, когда это возможно, потому что они убивают тестируемость и ремонтопригодность. Два больших чтения, которые подробно излагаются:
РАЗРЕШЕНИЕ: По этому вопросу, похоже, много недоразумений. Отсутствие инъекции зависимостей является реальной проблемой. Прямо вызов статических методов просто является одним из наиболее распространенных способов попадания в эту ловушку.
Статический метод не требует экземпляра (и может возвращать его вместо) и более или менее похож на глобальную функцию, за исключением того, что он помещается в пространство имен класса (и, следовательно, избегает коллизий с другими функциями) и имеет доступ к закрытым членам класса ,
Поэтому используйте его всякий раз, когда вас интересуют эти свойства функции.
Нет ничего особенного в PHP, касающемся использования статических методов.
Статические методы могут быть вызваны непосредственно в классе – нет необходимости в экземпляре объекта.
Поэтому их основное использование – методы, связанные с функциональными возможностями классов, но для использования другого кода не требуется использовать существующий экземпляр.
Общим примером может служить пользовательский метод сравнения, который может быть передан, например, функции uasort () для сортировки массива объектов типа класса.
вы можете использовать статические методы для повышения производительности. вам не нужно создавать объект для каждого пользователя, который с помощью вашего веб-приложения и создания объекта с несколькими методами и свойствами работает медленнее и нуждается в гораздо большем количестве системных ресурсов.
Вам не нужно создавать экземпляр класса для использования его статических методов.