Статические блоки памяти (переменные, функции, методы, свойства) нужно использовать только тогда, когда вы понимаете, почему они у вас здесь и сейчас должны быть статическими.
Статические методы ругают за то, что они вызываются без инициализации класса и, соответственно, не взаимодействуют с другими его членами, что идет вразрез и с самой идеей ООП, и с практическими подходами вроде SOLID.
Часто статические методы применяются в составе хелперов, т. е. если класс используется как контейнер для методов (а, по сути, обычных функций), сгруппированных по смыслу, где не подразумевается создание объекта. Например,
namespace app\helpers;
class StringHelper
{
public static function truncate($string)
{
//...
}
public static function capitalize($string)
{
//...
}
}
Но такой подход тоже ругают :) Хотя бы потому, что с приходом пространств имен в PHP группировать и изолировать таким образом функции уже не нужно.
namespace app\helpers\string;
function truncate($string)
{
//...
}
function capitalize($string)
{
//...
}
- теперь вместо
\app\helpers\StringHelper::truncate($string);
используем
\app\helpers\string\truncate($string);
суть не меняется, но мусорный бак с набором "всякой всячины" превратился в аккуратный чемоданчик инструментов)
P. S.: как справедливо заметили коллеги по цеху, автозагрузки функций в PHP до сих пор нет. Поэтому такой подход остается "правильным" только теоретически, а на практике до сих пор используются "хэлперы"