Но вопрос в том что все это по сути не имеет смысла потому что при каждом запросе к серверу будет заново создаваться синглтон
Вы не понимаете, как работает умирающая модель в php. Все верно, на каждый запрос создается окружение для его выполнения и после выполнения процесс уничтожается, язык заточен именно под такой режим работы.
Возможно ли как то изменить это поведение или хотя бы закэшировать данные?
memcache, redis, xcache, apcu,... выбирайте
У меня в xml файле хранятся какие-то настройки.
Как минимум можете перевести xml в php код, который в свою очередь закешируется через opcache. При следующем запросе этот код будет браться из пямяти.
Самый логичный способ использовать для такой цели статический класс или синглтон.
Для неумирающей модели выполнения - вполне возможно. В php-шном мире это не так. Закроем глаза на то, что синглтон - антипаттерн, а статика очень близка к этому.