我试图在我的php脚本中使用全局变量,并在php.net上找到了全局变量的用法。但它不能在我的本地服务器上运行。我错过了任何配置吗?
that page上有一个示例:
<?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。
答案 0 :(得分:5)
正如我猜测你正在使用comments中所述的框架:
@ Rizier123 是的,我使用的是Laravel 。有关系吗? - Kai 6分钟前
如果重要的话?是的确如此。
这里可能发生的事情是,你在这里向我们展示的代码被包装到其他地方的另一个函数中。
意味着Sum()
函数中的变量属于全局范围,但其他变量不属于它,因为它们可能位于另一个函数==另一个范围内。
您可以使用以下代码重现它:
function anotherFunction() {
$a = 1;
$b = 2;
function Sum() {
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b;
}
anotherFunction();
如果你有error reporting,你会得到:
注意:未定义索引: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;