Есть много школ мысли об этом. Самая простая реализация - это, вероятно, глобальный файл конфигурации, который устанавливает константы, используя define()
Однажды я работал с фреймворком, который широко использовал этот метод, в сочетании с синглетонами для доступа к базе данных и настройками домена. Он по-прежнему широко используется, но, как правило, более глубокое внедрение зависимостей, где определения для конфигурации сделаны специфичными для класса, теперь считается более современным и многократно используемым, поскольку один пакет содержит все определения, чтобы он работал в одном и том же файле.
http://misko.hevery.com/2009/01/14/when-to-use-dependency-injection/
Это отличная статья о тончайших точках внедрения зависимостей. Важно помнить, что объекты должны создавать экземпляры или передавать другие объекты только в том случае, если они непосредственно необходимы в текущей области видимости. Автор подробно рассказывает.
Существует также множество более известных библиотек, таких как HTMLPurifier, которые используют объект конфигурации, который передается конструктору экземпляра объекта при его создании. Это хороший подход, если ваш объект имеет очень сложную и вложенную конфигурацию.