2012-08-06 102 views
3

我想知道到底发生了什么,当我这样做:PHP和功能范围

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

我知道,功能$my_variable的范围内,现在是“富”。

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

回答

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

我相信当'global'被调用时,本地版本摧毁那里。我从函数中的unset()函数和[unset docs](http://php.net/manual/en/function.unset.php)中的这个声明推断出这一点:*如果一个全局变量是unset()函数内部,只有局部变量被销毁。调用环境中的变量将保持与调用unset()之前相同的值。* – Fluffeh 2012-08-06 01:35:26

2

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

0

把它看成是这样的:

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