PHP глобальный вар для всего?
Возможный дубликат:
Шаблон дизайна реестра… хорошо или плохо?
Я работаю над сценарием игры, который использует PHP, и я подхожу к нему так же, как я создаю многие из моих сайтов. У меня есть привычка объявлять одну переменную, которая является stdClass, содержащей много других переменных, которые важны для выполнения. Затем, если мне когда-нибудь понадобится что-то внутри функции (если это не передано в параметрах), я просто использую глобальную переменную $, в данном случае $ar.
$ar = new stdClass;
$ar->i = new stdClass;
$ar->s = new stdClass;
$ar->i->root = "/home/user";
/* Directory where log files are to be stored. */
$ar->i->logs = "{$ar->i->root}/logs";
/* Directory where the banlist is. */
$ar->i->bl = "{$ar->i->root}/customize/settings/bannedaccounts.txt";
/* Directory where the silencelist is. */
$ar->i->sl = "{$ar->i->root}/customize/settings/silencedaccounts.txt";
/* How many points should be awarded for 1st place, 2nd place... etc. */
$ar->s->points = array(10, 7, 5, 4, 3, 2, 1, 1, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1);
Так что, если бы я использовал одну из вышеуказанных переменных в функции, я бы подошел к этому следующим образом.
public function run() {
global $ar;
//do something with the variable..
}
Кто-нибудь посоветует не делать этого? Является ли использование одной переменной и включение ее во множество функций плохой практикой, которую следует избегать? Я знаю, что желательно создавать функции, которые работают только с заданными параметрами, но я спрашиваю об этом с точки зрения производительности PHP, а не ясности программирования. Спасибо!
1 ответ
Элементы данных, которые собираются вместе для представления объекта, должны быть объектом. Если у вас есть вещи, которые не связаны, не помещайте их в один и тот же объект.
Если вам нужна глобальная область видимости (а обычно нет), вы можете использовать $GLOBALS
, Тем не менее, я предлагаю вам следовать принципам ООП для большинства проектов. Как минимум, используйте параметры функции.
Если у вас была библиотека функций, таких как run()
что нужны эти переменные (или, даже просто run()
!), есть служебный класс, где эти переменные являются членами этого класса.