Задача про INI-файлы

Предыстория

Есть у меня один знакомый, который разрабатывает проект на Zend Framework 1. А у знакомого есть клиенты, которым он каждый раз создаёт копию своего проекта. К слову, он этот проект клонирует не только для клиентов, но и для разработчиков. В результате на сервере хранятся несколько сотен копий этого проекта. И всё было бы хорошо, да только приспичило знакомому менять настройки в application.ini , да ещё и во всех проектах сразу.

Задача

Есть INI-файл формата Zend Framework 1:

[production]
foo = SOME_CONST "bar"; Комментарий

[testing : production]
foo = baz

Нужно написать код, который бы позволял изменять существующие значения настроек, а также добавлять новые настройки и секции.

PHP-код

В своей реализации я использовал объектный подход, но это не обязательно. Самое главное получить правильный результат.

<?php

$iniText = '[production]
foo = SOME_CONST "bar"; Комментарий

[testing : production]
foo = baz';

$ini = new class ($iniText) {
    // Реализация процессора
};

$ini->setRawValue('production.fee', 'CONST "faa" ; Ещё комметарий' . PHP_EOL);
$ini->setRawValue('testing.foo', '"Новое тестовое значение"');
$ini->setRawValue('new_section.bar.baz.bee', '"Новое значение в новой секции"');

echo $ini, PHP_EOL;

Правильный результат работы:

[production]
foo = SOME_CONST "bar"; Комментарий

fee = CONST "faa" ; Ещё комметарий

[testing : production]
foo = "Новое тестовое значение"

[new_section]
bar.baz.bee = "Новое значение в новой секции"

P.S.

В теории в zf1 есть реализация работы с INI-файлами в нужном формате, но я не хотел наткнуться на скрытые баги при работе с этими компонентами. Моя реализация оказалась проще и надёжней, поскольку на 100% уверен в том, как она работает.

Хорошая задача, мне понравилась. Оставлю отзыв!