Я работаю над новым проектом с большой базой кодов PHP.Приложение использует довольно много констант PHP (define('FOO', 'bar')
), особенно для таких вещей, как параметры подключения к базе данных.Все эти константы определены в одном конфигурационном файле, который require_once()
'непосредственно для каждого класса в приложении.
Несколько лет назад это имело бы смысл, но с тех пор я получилошибка модульного тестирования и эта тесная связь между классами действительно беспокоит меня.Эти константы пахнут как глобальные переменные, и на них ссылаются непосредственно в коде приложения.
Это все еще хорошая идея?Было бы разумно скопировать эти значения в объект и использовать этот объект (т. Е. Бин - там, я это сказал), чтобы передать их посредством внедрения зависимостей в классы, которые взаимодействуют с базой данных?Делая это, я побеждаю какие-либо преимущества констант PHP (скажем, скорости или чего-то еще)?
Еще один подход, который я рассмотрю, - это создание отдельного скрипта конфигурации PHP для тестирования.Мне все еще нужно найти способ заставить тестируемые классы использовать сценарий конфигурации песочницы вместо сценария глобальной конфигурации.Это все еще кажется хрупким, но это может потребовать менее прямой модификации всего приложения.