Глобальные переменные не работают должным образом с помощью фреймворков

Я пытаюсь использовать глобальные переменные в моем php-скрипте, и я нашел использование глобальной переменной на php.net . Но это не работает на моем локальном сервере. Есть ли какая-то конфигурация, которую я пропустил?

На этой странице приведен пример:

<?php $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; ?> 

Вышеприведенный скрипт выведет 3.

Однако мой результат равен 2!

Другой пример:

 <?php $a = 1; $b = 2; function Sum() { $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; } Sum(); echo $b; ?> 

Я получаю ошибку:

Неопределенный индекс: a

Так в чем дело? Почему мой код работает так, как ожидалось?
По пути я использую Laravel.

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

@ Rizier123 Да, я использую Laravel . Это имеет значение? – Кай 6 мин назад

И если это имеет значение? Да.

Вероятно, здесь происходит то, что код, который вы нам показываете, завернут в другую функцию где-то еще.

Означает, что переменные в функции Sum() находятся в глобальной области видимости, а другие вне нее, поскольку они, вероятно, находятся в другой функции == другой области.


Вы можете воспроизвести его с помощью этого кода:

 function anotherFunction() { $a = 1; $b = 2; function Sum() { $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; } Sum(); echo $b; } anotherFunction(); 

И если у вас есть отчет об ошибках, вы получите:

Примечание. Неопределенный индекс: a
Примечание. Неопределенный индекс: b
2

Просто поставьте сообщение об ошибке в верхней части файла (ов), чтобы получить полезные сообщения об ошибках:

 <?php ini_set("display_errors", 1); error_reporting(E_ALL); ?> 

Чтобы решить эту проблему, вы должны объявить переменные также в глобальной области, либо с помощью:

 $GLOBALS["a"] = 1; $GLOBALS["b"] = 2; 

или вот так:

 global $a, $b; $a = 1; $b = 2;