Должен ли я использовать вызовы методов CONSTANT с шаблоном реестра в PHP? - PullRequest
0 голосов
/ 20 января 2010

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

Ответы [ 3 ]

2 голосов
/ 22 января 2010

Я избегаю констант в PHP, они делают непроверяемыми. Это суть моего предпочтительного решения:

любой .ini:

<?php

return array(
  'setting-1' => 'value',
  'setting-2' => 'another value',
);

config.php:

class config
{
  public function __construct($path)
  {
    $this->cfg = include $path;
  }
  private $cfg;
  public function get($key, $default)
  {
    return array_key_exists($this->cfg, $key)
      ? $this->cfg[$key]
      : $default
    ;
  }
}

index.php:

$cfg = new config('my.ini');

...

1 голос
/ 22 января 2010

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

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

define ('APP_SMTP_SERVER', 'mail.company.com');

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

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

1 голос
/ 20 января 2010

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

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

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

...