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