Нужны ли статические методы? Когда их применение оправдано?
Статические методы и глобальные функции уместны только если это чистые функции (детерминированные без побочных эффектов).
То есть функции, которые просто что-то однообразно считают или создают, а не лезут сами или через синглтоны в глобалы, конфиги, файлы, сокеты или БД.
как подменять сервис в контейнере?
Чистые функции нет смысла подменять в контейнере внедрения зависимостей.
допустим, вызов должен быть залогирован, что тогда?
Тогда уже инъектим эту функцию в конструктор или метод как callable или invoke/interface и декорируем.
Или войти через: