Есть ли лучшая практика / рекомендация, когда я хочу использовать переменную, объявленную вне функции, когда дело касается использования:
global $ myVar
$ GLOBALS [ 'myVar']
Спасибо.
Что вам действительно следует сделать, так это передать переменную в функцию вместо того, чтобы вообще использовать глобальную переменную.
Пример, как изменить переменную вне функции, передав ее в качестве ссылочного параметра:
function myFunc(&$myVar)
{
$myVar = 10;
}
$foo = 0;
myFunc($foo);
var_dump($foo); // yields 10
Я бы сказал, что не рекомендуется чтобы использовать глобалы в ООП, всегда должен быть лучший способ
Ну, вам следует использовать глобальные переменные только в ограниченных случаях, но чтобы ответить на ваш вопрос:
глобальная
потенциально немного быстрее (это редко будет иметь значение). $GLOBALS
(не $GLOBAL
) более удобочитаема, потому что каждый раз, когда вы ее видите, вы знаете, что получаете доступ к глобальной переменной или изменяете ее. Это может иметь решающее значение для предотвращения неприятных ошибок. unset($GLOBALS['varname'])
, а не global $varname; unset($varname);
. Что касается пунктов 1 и 2, я процитирую Сару Големон здесь:
Что это означает для вашего использования массива
$GLOBALS
? Правильно, ключевое словоglobal
технически быстрее. Я хочу прояснить здесь одну вещь. Небольшой выигрыш в скорости, обеспечиваемый использованием ваших глобальных переменных в качестве локализованных [скомпилированных переменных], необходимо серьезно сопоставить с удобством сопровождения, когда вы смотрите на свой код через пять лет и знаете, что$foo
пришли из глобальной области видимости.something_using($GLOBALS['foo']);
ВСЕГДА будет более понятным для вас в дальнейшем, чемglobal $foo; /* групповой код */ something_using($foo);
Не мудрите с деньгами и фунтами..
global $var;
эквивалентно $var =& $GLOBALS['var']
.
Некоторые считают, что это быстрее, чем использование $GLOBALS
, однако это не всегда так. Если вы используете переменную только один раз, $GLOBALS
будет быстрее, потому что вы не будете тратить время на присвоение.
Однако, если вы используете переменную несколько раз, использование global
(или эквивалентное присваивание) будет быстрее, потому что поиск ключа var
в массиве выполняется только один раз.
Вот и все о скорости. Однако разница в скорости действительно небольшая, а читабельность важнее. Однако у разных людей разные предпочтения в отношении удобочитаемости - я предпочитаю global
, некоторые другие люди, отвечающие здесь, предпочитают $GLOBALS
, поэтому вам решать, что выглядит лучше.
Используйте global
в верхней части функции. Таким образом, вы можете легко увидеть, какие глобальные переменные используются.