Страницы

Поиск по вопросам

пятница, 9 ноября 2018 г.

Разница между global и $GLOBALS

В интернете видел что пишут разница лишь в написании, так ли это?
Снизу товарищ Saidolim написал один пример, хочу продолжить вопрос...
Есть такой код
/// Пример 1 $str = "Simple text"; $a = function() { global $str; $str = "edited"; }; $a(); echo $str."
"; /// edited
/// Пример 2 $str = "Simple text"; $a = function() { $GLOBALS["str"] = "edited"; }; $a(); echo $str."
"; /// edited
/// Пример 3 $str = "Simple text"; $temp = ""; $a = function() { $GLOBALS["temp"] = &$GLOBALS["str"]; }; $a(); echo "[".$str."] [".$temp."]
"; /// [Simple text] [Simple text]
/// Пример 4 $str = "Simple text"; $temp = ""; $a = function() { global $str, $temp; $temp = &$str; }; $a(); echo "[".$str."] [".$temp."]
"; /// [Simple text] []
Первый пример выводит как и ожидается измененное значение, второй пример то же самое...казалось бы отличия нет, идем дальше! В третьем примере в функции мы делаем жесткую ссылку для элементов суперглобального массива выводит как и ожидается одно и то же слово, и вот смотрим четвертый пример и ... я в ступоре он не линкует и выводит только переменнную $str, а переменную $temp оставляет пустой, почему?
P.S Написал тут ибо не хотел спамить вопросами по одному и тому же


Ответ

Инструкция global обращается к глобальному массиву $GLOBALS. И получает значение переменной $GLOBALS['var']. Отличие только в написании.
P.S. Совет при использовании глобальных переменных: держитесь от них подальше, используя их только тогда, когда без них не обойтись.
Злоупотребление глобальными переменными может довести человека анализирующего ваш код до белой горячки.

Комментариев нет:

Отправить комментарий