PHP global или $GLOBALS

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

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

спасибо.

5 ответов


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

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

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);.

что касается пунктов 1 и 2, я буду цитата Golemon здесь Сара:

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


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


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


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

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

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

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