С внедрением зависимости клиент не должен получать его зависимости самостоятельно, его все подготовились заранее.
С фабриками, кто-то должен назвать их для окончания сгенерированных объектов к месту, где они необходимы.
различие заключается главным образом в этой строке, где вызов фабрики и выборка созданного объекта сделаны.
, Но с фабриками необходимо записать эту 1 строку везде, Вам нужен такой объект. С DI просто необходимо создать проводное соединение (отношение между использованием и созданным объектом) однажды и просто полагаться на присутствие объекта позже везде. С другой стороны DI часто требует немного больше (сколько зависит от платформы), работа над стороной подготовки.
Выполняя некоторые обзоры кода в последнее время, я натолкнулся на несколько классов, в которых есть значительное количество статических методов ... и я не могу понять, почему
PHP не имеют пространства имен до 5.3, поэтому все функции / переменные будут в глобальной области, если они не принадлежат какому-либо классу. Помещение их в класс в качестве статических членов - это обходной путь для отсутствия пространств имен (и, вероятно, поэтому вы видели их в «значительном» количестве)
Как правило, они используются для функций, которые не очень полезны для отдельных объектов, но имеет некоторое использование на уровне класса (как сказано в других ответах)
Статические методы используются для
Статический метод не требует экземпляра (и может возвращать его вместо него) и более или менее похож на глобальную функцию, за исключением того, что он помещается в пространство имен класса (и, следовательно, избегает столкновений с другими functions) и имеет доступ к закрытым членам класса.
Итак, используйте его всякий раз, когда вас интересуют эти свойства функции.
Нет ничего специфического для PHP в использовании статических методов.
Статические методы могут быть вызваны непосредственно в классе - нет необходимости в создании экземпляра объекта.
Таким образом, их основное использование - для методов, которые связаны с функциональностью классов, но не нуждаются в существующем экземпляре для использования в другом коде.
Типичным примером может быть специальный метод сравнения, который может быть передан, скажем, в функцию uasort () для сортировки массива объектов типа class.
Вам не нужно создавать экземпляр класса, чтобы использовать его статические методы.