全局变量未按预期与框架配合使用



我试图在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;
?>

我得到错误:

未定义的索引:

那是怎么回事?为什么我的代码不能按预期工作
顺便说一句,我用的是拉拉威尔。

因此,正如我所猜测的,您使用的是一个框架,正如您在评论中所说:

@Rizier123是的,我正在使用Laravel。这有关系吗Kai 6分钟前

如果重要的话?是的。

可能这里发生的事情是,您在这里向我们展示的代码被封装到其他地方的另一个函数中。

意味着Sum()函数中的变量在全局范围内,但它之外的其他变量不在,因为它们可能在另一个函数==另一个范围内。


您可以用以下代码复制它:

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

如果你有错误报告,你会得到:

注意:未定义的索引:a
通知:

只需将错误报告放在文件的顶部即可获得有用的错误消息:

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

现在要解决这个问题,您必须在全局范围内声明变量,或者使用:

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

或者像这样:

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

相关内容

  • 没有找到相关文章

最新更新