Я пытаюсь использовать глобальные переменные в моем 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;