PHP глобальный или $ GLOBALS

Есть ли наилучшая практика / рекомендации, когда я хочу использовать переменную, объявленную вне функции, когда дело доходит до использования:

  1. global $myVar
  2. $GLOBALS['myVar']

Спасибо.

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

Пример того, как изменить переменную вне функции, передав ее как ссылочный параметр:

 function myFunc(&$myVar) { $myVar = 10; } $foo = 0; myFunc($foo); var_dump($foo); // yields 10 

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

  1. global потенциально незначительно быстрее (это редко будет иметь значение).
  2. $GLOBALS (не $GLOBAL ) более читабельна, потому что каждый раз, когда вы ее видите, вы знаете, что вы обращаетесь к / изменяете глобальную переменную. Это может сыграть решающую роль в предотвращении неприятных ошибок.
  3. Внутри функции, если вы хотите отменить глобальную переменную, вы должны использовать unset($GLOBALS['varname']) , а не global $varname; unset($varname); global $varname; unset($varname); с global $varname; unset($varname); ,

Что касается пунктов 1 и 2, я приведу Сара Големона здесь:

Что это означает для использования массива $GLOBALS ? Правильно, global ключевое слово технически быстрее. Теперь я хочу по-настоящему понять одно здесь. Небольшое значение скорости, предоставляемое с помощью ваших глобальных переменных, как локализованных [скомпилированных переменных], должно быть серьезно привязано к проверке на удобство просмотра вашего кода через пять лет и зная, что $foo поступает из глобальной области. something_using($GLOBALS['foo']); будет ВСЕГДА быть более ясным для вас по линии, чем global $foo; /* buncha code */ something_using($foo); global $foo; /* buncha code */ something_using($foo); Не будьте мудрыми и фунтами глупыми ..

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

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

global $var; эквивалентно $var =& $GLOBALS['var'] .

Некоторые люди предположили, что это быстрее, чем использование $GLOBALS , однако это не обязательно так. Если вы используете переменную только один раз, $GLOBALS будет быстрее, потому что вы не будете тратить время на назначение.

Однако, если вы используете переменную несколько раз, использование global (или эквивалентного назначения) выполняется быстрее, потому что поиск массива для ключа var только один раз.

Это все о скорости. Однако разница в скорости очень мала, и читаемость важнее. Однако разные люди имеют разные предпочтения в отношении удобочитаемости – я предпочитаю global , некоторые другие люди, отвечающие здесь, предпочитают $GLOBALS , поэтому вам решать, что выглядит лучше.