Как вы определяете глобальные переменные? - PullRequest
1 голос
/ 06 мая 2011

так как вы предпочитаете объявлять и использовать глобальные переменные? 1)

global variable;
echo $variable;

или 2)

echo $GLOBALS['variable'];

Какой метод менее плох? :)

редактирование:

или 3)

class myglobalstuff{

  static $instance;

  public static function foo(){
    if(!(self::$instance instanceof self))
      self::$instance = new self();

    return self::$instance;
  }
}
...

Ответы [ 7 ]

4 голосов
/ 06 мая 2011

Использование $GLOBALS менее плохо. Но если можете, избегайте глобалов :)

2 голосов
/ 06 мая 2011

Ключевое слово global не создает глобальную переменную как таковую, оно просто указывает сценарию обрабатывать переменную с глобальной областью действия.

Массив $GLOBALS на самом деле является суперглобальной переменнойнемного отличается.

Больше информации здесь, это хорошее чтение: http://php.net/manual/en/language.variables.scope.php

2 голосов
/ 06 мая 2011

В руководстве по PHP объясняется, как определять и использовать глобальные переменные: $ GLOBAL

1 голос
/ 06 мая 2011

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

Ввод ключей строкового массива можетпривести к опечаткам, которые могут быть хитрыми, чтобы обнаружить: $GLOBALS['var1'] против $GLOBALS['varl'] (один против lamda).

Если у вас есть современная IDE, которая выполняет автозаполнение, вы найдете полезным объявить global $variable, а затем, при вводе его, чтобы вызвать автозаполнение, чтобы получить указание, что вы не делали опечатку.

У такой современной IDE также может быть выделение событий, которое поможет избежать опечаток (вы можете увидеть, если оно появляется поблизости), а также навигации по вашему коду.Опять же, он будет работать только с переменными, а не с ключами массива.

Если вам нужно использовать глобальные переменные, тогда лучше использовать $GLOBALS, чтобы напомнить вам, откуда пришла переменная, когда вы ищете какое-то значение,Однако может быть полезно, по крайней мере, определить имена переменных как константу, чтобы воспользоваться преимуществами автозаполнения IDE и выделения вхождений: $GLOBALS[_VAR1].

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

1 голос
/ 06 мая 2011

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

Тебе было бы намного лучше, если бы ты научился писать правильный код ООП.


обновление

Мало ссылок и сопутствующей информации:

0 голосов
/ 07 августа 2011

Кроме того, игнорируя аргумент «no globals», я хотел бы провести четкое различие в использовании «global» декларации, потому что я видел, что оно использовалось повсеместно.По крайней мере, в PHP 5 бессмысленно делать следующее в коде глобальной области действия (код не находится внутри объявления функции или метода):

global $foo;
$foo = "someValueForEverything";

$ foo является глобальным, потому чтообъявлено глобально (не из-за ключевого слова global).Можно было бы использовать «global» внутри функции или метода, который должен ссылаться на глобальный $ foo (иначе возник бы локальный $ foo).

0 голосов
/ 06 мая 2011

Я бы пошел с $_SESSION['var'] над $GLOBALS. Это делает более или менее то же самое, но безопаснее. Изменить: я хотел сказать, более предпочтительный метод. Но, как говорили, $ GLOBALS скоро все равно обесценится.

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