Какой интерфейс ReadOnly настроек выбрать?
Мне нравятся 2 и 4, при чем если параметров конечное число вы можете в 2 добавить ещё PhpDoc секции в $this->config, тогда даже подсказки в IDE получите, я у себя обычно делаю оба, кому как удобно.
То, что вы ищите обычно называют не мутабельными моделями.
Все настройки задаются в конструкторе, там же они валидируются и присваиваются приватным свойствам. Сеттеров нет, только геттеры (вариант 3).
Конкретно для настроек имеет смысл создать класс с константами, например в таком виде:
config/AbstractConstant.php - общие настройки для всей системы И настройками "по умолчанию".
config/Constant.php (Наследует AbstractConstant) - это класс содержит настройки для текущего окружения.
В итоге в любой части системы вы получите доступ к настройкам примерно так:
\Contant::MYSQL_USER