Должен ли я использовать CONSTANT вызовов методов с шаблоном реестра в PHP?

На моем сайте у меня есть файл конфигурации, в котором есть много настроек, к которым нужно получить доступ на многих страницах, в том числе во многих файлах классов. Конфигурационный файл включается в шапку каждой сборки страницы. Поскольку я буду использовать метод реестра для хранения некоторых объектов, мне интересно, было бы лучше для меня сохранить некоторые настройки в этом классе, поскольку они будут доступны для всех моих других объектов? Из моего опыта за последние пару дней кажется, что доступ к КОНСТАНТАМ внутри моих файлов классов иногда затруднен. Я просто не уверен, будет ли это хорошей идеей, поскольку для установки и получения настроек потребуется вызвать несколько методов. Является ли обычной практикой хранение настроек в объекте типа реестра? Я видел в некоторых крупных проектах, что у них есть методы для установки/получения настроек, но я никогда не видел их в действии.


person JasonDavis    schedule 20.01.2010    source источник


Ответы (3)


Мне нравится хранить такие вещи в каком-то реестре. Хотя для меня это потому, что

  1. большинство моих значений конфигурации на самом деле состоят из нескольких частей (т. е. массивов), поэтому отображать большую часть этого с помощью констант было бы довольно долго. Кроме того, я не использую php для своих файлов конфигурации, я всегда использую XML или YAML, которые затем анализируются каким-либо образом, поэтому имеет больше смысла продолжать и вставлять их в реестр, а не использовать константы или глобальные переменные.
  2. Это позволяет одному API получать эти типы значений, будь то объект подключения к базе данных или путь к корневому каталогу в файловой системе.

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

person prodigitalson    schedule 20.01.2010
comment
Вы действительно анализируете файлы конфигурации xml для каждого запроса? - person Kimble; 22.01.2010
comment
Нет, обычно я кеширую результаты, поэтому они анализируются только по истечении срока действия или очистке кеша. - person prodigitalson; 22.01.2010

Я использую комбинацию двух подходов:

1: В каждом классе/контроллере я всегда начинаю с require_once('app_config.php'), в котором у меня есть такой код:

определить('APP_SMTP_SERVER', 'mail.company.com');

что я могу затем ссылаться как константа.

2: У меня есть одноэлементный класс «Реестр», где я могу хранить ключи и значения. Он имеет два открытых метода: getAttribute($key) и setAttribute($key, $value). Когда я сохраняю его в базу данных, я сериализую значение, чтобы оно могло хранить любой тип данных, который вы ему подбрасываете (одиночные значения или массивы и т. д.).

person Chris W.    schedule 22.01.2010
comment
Я рассматривал вариант № 2, так как работаю над использованием класса реестра, который я передам другим своим классам, поэтому я подумал, что, поскольку он будет виден везде, это было бы хорошим местом для хранения некоторых настроек. Я просто не был уверен в производительности, потому что вместо переменной или константы 20 раз для 20 настроек это было бы примерно 20 вызовов метода для установки настроек в моем реестре, а затем еще 20 вызовов метода только для их получения или что-то в этом роде. - person JasonDavis; 22.01.2010

person    schedule
comment
Это похоже на что-то подобное, что я хочу сделать! Однако не уверен насчет файла ini, разве для этого не требуется больше ресурсов, поскольку он поражает файловую систему при каждой сборке страницы? - person JasonDavis; 22.01.2010
comment
Файловые (мета)данные кэшируются ядром. Профиль, не спекулируйте. - person just somebody; 22.01.2010