【问题标题】:PHP and function scopePHP 和函数范围
【发布时间】:2012-08-03 00:38:23
【问题描述】:

我想知道当我这样做时到底会发生什么:

$my_variable = 'foo';
function whatever(){
    $my_variable = 'bar';
    global $my_variable;
}

我知道,在函数 $my_variable 的范围内现在是 'foo'。

内部发生了什么?当我在我的函数中执行$my_variable = 'bar'; 时,我创建了一个局部变量。当我在下一行执行global $my_variable; 时,究竟会发生什么?本地的会自动删除吗?

【问题讨论】:

    标签: php function scope


    【解决方案1】:

    这样想:

    $GLOBALS['my_variable'] = 'foo';
    function whatever(){
        $my_variable = 'bar';
        $my_variable = $GLOBALS['my_variable'];
    }
    

    【讨论】:

      【解决方案2】:

      是的,本地的会被自动删除,或者可能更好的措辞,它被替换为全局变量。

      【讨论】:

        【解决方案3】:

        在处理 global 之前,该函数将使用变量的本地 bar 副本。一旦它被声明为全局版本,本地版本就会被隐藏(或者可能被破坏,不确定......)并且只有全局版本可用。例如:

        $z = 'foo';
        function whatever() {
            echo $z; // warning: undefined variable
            $z = 'bar';
            echo $z; // bar
            global $z;
            echo $z; // foo
        }
        whatever();
        

        【讨论】:

        • 我相信当global 被调用时,本地版本就在那里被破坏了。我从函数中unset() 的动作和unset docs 中的这条语句推断出这一点:调用环境中的变量将保持与调用 unset() 之前相同的值。
        猜你喜欢
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 2013-10-28
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        • 2016-10-26
        • 1970-01-01
        相关资源
        最近更新 更多