Где разместить «Настройки» фреймворка - PullRequest
0 голосов
/ 20 марта 2011

это скорее концептуальный вопрос.Предположим, у вас есть php-фреймворк, который запускает общий веб-сайт.

Конечно, вы можете настроить поведение фреймворка с помощью настроек, вопрос в том, где более естественно разместить эти настройки?

Мой фреймворксостоит из некоторых функций, которые помогают мне выполнять некоторые задачи (например, управление кэшем).

В этом файле я использую переменную общего типа

$config = array( 'setting1'=>'value1' etc );

И если функция нуждается в этом, она делает global:

function manageCache() {
    global $config;

    //> perform task with settings from $config
}

Рассмотрите процедурную природу моей структуры и тот факт, что кто-то говорит global is evil, как бы вы управляли настройками?

Спасибо

Edit1:Пожалуйста, не говорите использовать константы, у меня тонны настроек, и я не хочу делать тонны констант + они должны быть доступны для редактирования

Ответы [ 5 ]

0 голосов
/ 20 марта 2011

В вашем конфигурационном массиве нет ничего плохого.Это довольно распространенный подход.Ошибка globals are evil - совет по программированию грузового культа.Пожалуйста, игнорируйте.

Теперь массив $config часто сам по себе прост в использовании.Но вы можете расширить это.Например, довольно просто превратить его в ArrayObject после инициализации:

$config = new ArrayObject($config, 2);

Это позволит вам получить доступ к настройкам как $config["setting"] и $config->setting.Это проще для глаз.

Если вы также хотите избежать повсеместного импорта массива, потому что вам иногда требуется только одно значение, тогда для удобства разверните его с помощью функции-оболочки config("setting").1014 * Кстати, я обычно сам использую сочетание массива конфигурации и констант.И я сделал небольшой инструмент управления для плагинов и массив настроек в центральном config.php.http://web135.srv3.sysproserver.de/milki.erphesfurt.de./genericplugins/genconfig.html

0 голосов
/ 20 марта 2011

Обычно у вас есть папка конфигурации где-нибудь в вашей структуре, которую вы автоматически включаете при запуске.

Возможно, это будет выглядеть так:

ROOT/
  config/
    db.php
    cache.php
    constants.php

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

$config->get_config('settings_1');
0 голосов
/ 20 марта 2011

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

Тем не менее, вы не можете (легко) хранить сложные типы данных, такие как массивы, через определения, поэтому вы захотите учесть это.

0 голосов
/ 20 марта 2011

Передать глобал как параметр функции

manageCache($config);

Глобалы действительно злые

0 голосов
/ 20 марта 2011

Если ваши настройки постоянны и не меняются, рассмотрите возможность использования define() - http://php.net/manual/en/function.define.php

//Set anywhere like this
define("DB_NAME", "stackoverflow");

// You can then read it from anywhere using 
echo DB_NAME;

Если они должны быть доступны для редактирования, тогда вы можете использовать globals, но убедитесь, что register_globals выключен.

Если вы используете PHP5, вы можете реализовать шаблон реестра для этого.

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