PHP和功能范围

时间:2012-08-06 01:21:58

标签: php function scope

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

,本地文件会自动删除,或者措辞更好,会被全局变量替换。

答案 2 :(得分:0)

这样想:

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