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()!), есть служебный класс, где эти переменные являются членами этого класса.

Другие вопросы по тегам