Что считается лучшей практикой для обработки переменных, хранящихся в файле конфигурации? - PullRequest
3 голосов
/ 07 мая 2009

Если я использую файл конфигурации для хранения, например, имени сайта, хоста базы данных и т. Д., Как лучше всего это сделать?

  1. $sitename="stackoverflow.com"; и затем установка глобального $ sitename в функциях
  2. DEFINE(_SITENAME,"stackoverflow.com")
  3. function vars(){return array(sitename=>"stackoverflow");}

Мне бы хотелось получить техническое объяснение, почему я должен выбрать одно вместо другого.

Спасибо!

Ответы [ 5 ]

3 голосов
/ 07 мая 2009

Обычно считается «лучшей» практикой хранить директивы конфигурации уровня приложения в отдельном тексте конфигурации или XML-файле. Вы можете создать класс, который загружается как одноэлементный экземпляр, который анализирует файл и дает вам то, что вы хотите, например:

$config->get('DB_HOSTNAME');

Посмотрите на Zend_Config .

2 голосов
/ 07 мая 2009

Я склонен использовать define () для "внешней" конфигурации, поскольку ссылка на константу должна быть быстрее, чем вызов новой функции. Это также концептуально соответствует тому, что я делаю:

/**
 * Set the application mode. Valid options are "development" and "production"
 */
define('APP_MODE', 'development');

// Database Host
define('DB_HOST', 'localhost');

Другой вариант - использовать ini-файлы (убедитесь, что они , а не в корне сети) и функцию parse_ini_file(), хотя вы должны запускать это только один раз и использовать одиночный код для доступа к переменным после тот. (На самом деле, вы должны лениво загружать его, анализируя файл только при первом запросе.)

1 голос
/ 07 мая 2009

Мне нравится использовать define, так как это предотвратит случайное изменение констант позже. Это также упрощает определение в вашем коде, что вы используете константу.

Другие упоминали об использовании файла конфигурации - это хорошая идея, но основная причина этого в большинстве языков заключается в том, что вы можете изменить файл конфигурации без необходимости перестраивать / развертывать приложение. Поскольку PHP не является скомпилированным языком, я не вижу особой пользы в использовании конфигурационных файлов ini или XML в PHP.

1 голос
/ 07 мая 2009

Вы можете легко импортировать данные конфигурации в виде INI-файла, используя функции parse_ini_file или parse_ini_string. Ваша конфигурация будет храниться в том же формате, что и php.ini.

0 голосов
/ 08 мая 2009

Мне нравится использовать глобальный одноэлементный объект в соответствии с тем, что предлагает karim79, и чтобы реализация одноэлементного класса считывала конфигурацию из набора файлов .ini с помощью parse_ini_file. Также рекомендуется иметь отдельные файлы .ini для каждой серверной среды, например

.

production.ini testlab.ini demoserver.ini

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...