全局变量在框架中没有按预期工作

Kai*_*Kai 1 php variables frameworks global-variables laravel

我正在尝试在我的php脚本中使用全局变量,我在php.net上找到了全局变量的用法.但它在我的本地服务器上不起作用.我错过了任何配置吗?

该页面上有一个示例:

<?php
$a = 1;
$b = 2;

function Sum()
{
    global $a, $b;

    $b = $a + $b;
} 

Sum();
echo $b;
?>
Run Code Online (Sandbox Code Playgroud)

上面的脚本将输出3.

但是我的输出是2!

另一个例子:

<?php
$a = 1;
$b = 2;

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

Sum();
echo $b;
?>
Run Code Online (Sandbox Code Playgroud)

我收到错误:

未定义的索引:a

那是什么处理呢?为什么我的代码不按预期工作?
通过他们的方式,我正在使用Laravel.

Riz*_*123 5

所以我猜你正在使用你在评论中所说的框架:

@ Rizier123 是的,我正在使用Laravel.有关系吗? - 凯6分钟前

如果重要的话?是的,它确实.

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

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


您可以使用以下代码重现它:

function anotherFunction() {
    $a = 1;
    $b = 2;

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

    Sum();
    echo $b;
}

anotherFunction();
Run Code Online (Sandbox Code Playgroud)

如果您有错误报告,您将获得:

注意:未定义索引:a
注意:未定义索引:b
2

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

<?php
    ini_set("display_errors", 1);
    error_reporting(E_ALL);
?>
Run Code Online (Sandbox Code Playgroud)

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

$GLOBALS["a"] = 1;
$GLOBALS["b"] = 2;
Run Code Online (Sandbox Code Playgroud)

或者像这样:

global $a, $b;
$a = 1;
$b = 2;
Run Code Online (Sandbox Code Playgroud)