На моем сайте у меня есть файл конфигурации, в котором есть много настроек, к которым нужно получить доступ на многих страницах, в том числе во многих файлах классов. Конфигурационный файл включается в шапку каждой сборки страницы. Поскольку я буду использовать метод реестра для хранения некоторых объектов, мне интересно, было бы лучше для меня сохранить некоторые настройки в этом классе, поскольку они будут доступны для всех моих других объектов? Из моего опыта за последние пару дней кажется, что доступ к КОНСТАНТАМ внутри моих файлов классов иногда затруднен. Я просто не уверен, будет ли это хорошей идеей, поскольку для установки и получения настроек потребуется вызвать несколько методов. Является ли обычной практикой хранение настроек в объекте типа реестра? Я видел в некоторых крупных проектах, что у них есть методы для установки/получения настроек, но я никогда не видел их в действии.
Должен ли я использовать CONSTANT вызовов методов с шаблоном реестра в PHP?
Ответы (3)
Мне нравится хранить такие вещи в каком-то реестре. Хотя для меня это потому, что
- большинство моих значений конфигурации на самом деле состоят из нескольких частей (т. е. массивов), поэтому отображать большую часть этого с помощью констант было бы довольно долго. Кроме того, я не использую php для своих файлов конфигурации, я всегда использую XML или YAML, которые затем анализируются каким-либо образом, поэтому имеет больше смысла продолжать и вставлять их в реестр, а не использовать константы или глобальные переменные.
- Это позволяет одному API получать эти типы значений, будь то объект подключения к базе данных или путь к корневому каталогу в файловой системе.
С учетом сказанного, я думаю, что это действительно зависит от того, каковы значения и как вы собираетесь их использовать, и являются ли они структурными или по существу плоскими.
Я использую комбинацию двух подходов:
1: В каждом классе/контроллере я всегда начинаю с require_once('app_config.php'), в котором у меня есть такой код:
определить('APP_SMTP_SERVER', 'mail.company.com');
что я могу затем ссылаться как константа.
2: У меня есть одноэлементный класс «Реестр», где я могу хранить ключи и значения. Он имеет два открытых метода: getAttribute($key) и setAttribute($key, $value). Когда я сохраняю его в базу данных, я сериализую значение, чтобы оно могло хранить любой тип данных, который вы ему подбрасываете (одиночные значения или массивы и т. д.).