https://gist.github.com/Glebsky/ba1953d3913ee3d78b4b1d4fdbb7136d
Зачем ты в конструкторе возвращаешь this
Используй такую штуку как Primitive Obsession
Передавай либо объект полностью либо частично
бесполезные ветки if elseif можно заменить с помощью полиморфизма
if elseif в условии успешно избавляются благодаря стратегии
у тебя конструктор разве что кофе не умеет готовить выдели общие сетапы логики и вынеси их в приватные методы
в методы объекта более чем ~3-4 примитивов следует передавать объект as is либо же класс конфига(new Object(new Confid($array));
в общем там все настолько плохо, что проще написать заново, чем переделывать.
каждый класс god object,каждый метод априори статика, пагинатор с закосом под синглтон, общая логика не унифицирована, information expert плачет, закон деметры рыдает в сторонке