访问外部变量的变量范围问题

时间:2009-09-07 17:46:16

标签: php variables scope

我有一个具有大层次结构的函数:

function func(){
    $a= 0; // Here the variable is 0
    while(...){
        echo $a; // gives me always 0
        for(...){
            if(...){
                if(...){
                    $num = func3();
                    $a = $num; // this $a does not corrospond to $a in the beginning
                }
            }
        }
    }
}

有谁知道如何从嵌套范围更改$a的值?

3 个答案:

答案 0 :(得分:4)

在PHP 5.3之前,PHP只有两个范围:全局和本地函数范围。 PHP 5.3引入了闭包,这使得范围情况有点复杂,但它看起来并不像你在这里使用它们。

与许多其他C风格的编程语言不同,括号/块会调用另一个级别的scopre。您在函数开头声明的$a与您稍后访问的$a相同。如果您在$a中获得的值是意外的,那么缺少的代码(...)正在通过赋值更改其值,或者因为它通过引用传递给正在更改其值的其他函数。

答案 1 :(得分:0)

你可能在之前的范围内使用$ a或者func3()设置了“global $ a;”或者永远不会达到if语句

答案 2 :(得分:-1)

全球化。

global $a;

func() {
  $a = 0;
  while() {
    echo $a;
    for() {
      if() {
        if() {
          $a = func3();
        }
      }
    }
  }
}