Подтвердить что ты не робот

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

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

  • global $myVar
  • $GLOBALS['myVar']

Спасибо.

4b9b3361

Ответ 1

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

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

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

$foo = 0;
myFunc($foo);
var_dump($foo); // yields 10

Ответ 2

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

  • 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); Не будьте мудрыми и фунтами глупыми.

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

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