Статика или функции?
Глобальное состояние - это плохо. Но вот только вещи типа валидации, обрезки картинок и т.д. не имеют состояния. У вас один вход и один выход.
Потому функций для этого достаточно.
Статику следует использовать тогда, когда вам нужна функция, работающая с объектами одного типа, и когда этой функции нужен доступ к состоянию объекта. Идеальный пример - статические методы фабрики. Ключевой момент - у этих функций нет своего состояния.
Ну и ооочень редко нужно хранить статическое состояние. Например сингелтоны полезны когда вам нужно работать с ком портом и вам смертельно важно что бы небыло ни единой возможности создать два экземпляра класса для работы с оным.
Если функция атомарна и не имеет зависимостей от других функций \ классов \ внешних переменных, а также может вызываться многократно за один цикл выполнения, то можно использовать ее. Наглядный пример - простая обрезка картинок, либо форматирование текста.
Если функция имеет зависимости, либо слишком большая (это может привести к ее разбиению на несколько функций в будущем), а также не должна выполняться более одного раза за цикл выполнения, то лучше использовать класс с методами, возможно - синглтон. Наглядный пример - управление подключением к базе данных, когда нам нужно не допустить повторного вызова данного метода.
И как по мне, нет ничего страшного в создании объекта, пусть даже и для единоразового действия.