PHP global или $ GLOBALS

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

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

Спасибо.

43
задан Spudley 17 July 2012 в 21:16
поделиться

5 ответов

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

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

function myFunc(&$myVar)
{
    $myVar = 10;
}

$foo = 0;
myFunc($foo);
var_dump($foo); // yields 10
31
ответ дан 26 November 2019 в 22:38
поделиться

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

3
ответ дан 11 November 2019 в 22:54
поделиться

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

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

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

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

75
ответ дан 26 November 2019 в 22:38
поделиться

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

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

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

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

0
ответ дан 26 November 2019 в 22:38
поделиться

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

3
ответ дан 26 November 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: