Статика VS Singleton?
Если вам нужна кучка функций, хоть и под общей эгидой — статика.
Если вам нужен объект — одиночка.

Важная между ними разница — вызов конструктора и деструктора. У синглтона и тот и другой вызываются автоматически.
Тогда как в куче статических методов вам придётся в каждом методе проверять, был ли вызван конструктор для достижения того же эффекта. Да, от этого можно избавиться, реализовав __CallStatic и приняв правила именования методов так, чтобы в чистом виде они никогда не вызывались, но не кажется ли это вам костылём?
Тоже столкнулся с этим вопросом, когда реализовывал реестр. Пока остановился на статическом массиве и методах, ибо там всего 2 метода и 1 статический массив.