Как именно я должен хранить данные конфига?!
Смотрите. У вас есть конфиг, есть классы, которым нужно получить данные этого конфига.
Как именно он хранится - эти классы не знают и знать не желают.
Потому что вы сделали класс конфига, у которого есть внешние функции "получить нужные данные" и внутренний механизм, который реально берет их оттуда, где они хранятся. Это же ООП.
Мне нужно сделать это через класс с ограничением видимости или как-то еще?
Да, внутренняя часть делается через ограничение protected / private
Если это будет класс, нужно ли в данном случае использовать конструктор?
Если данные, например, хранятся в базе и один раз считываются из нее в кэш, из которого уже и отдаются по каждому запросу - логично сделать это в конструкторе. Если у вас просто простыня РНР-массива, обращение к которому ничего не стоит - он может быть статикой, и методы тоже. Но лучше сразу предполагать, что все может измениться и сделать пустой конструктор и нестатические методы даже в этом случае. Чтобы потом не переписывать те классы, которые обращаются за данными.