【问题标题】:Global variables aren't working as expected with frameworks全局变量在框架中没有按预期工作
【发布时间】:2015-07-10 08:01:24
【问题描述】:

我试图在我的 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。

【问题讨论】:

    标签: php variables laravel frameworks global-variables


    【解决方案1】:

    所以我猜你正在使用你在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;
    

    【讨论】:

    • 我不介意侦探式的问题和答案是否违反了网站指南。这太有趣了,不能不投票。
    猜你喜欢
    • 2010-09-11
    • 2020-11-30
    • 2018-03-09
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多