В интернете видел что пишут разница лишь в написании, так ли это?
Снизу товарищ 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. Совет при использовании глобальных переменных: держитесь от них подальше, используя их только тогда, когда без них не обойтись.
Злоупотребление глобальными переменными может довести человека анализирующего ваш код до белой горячки.
Комментариев нет:
Отправить комментарий