PHP 3 专题 -- 变量的活动范围

---摘自互联网

        变量的活动范围仅仅限于定义它的上下文。对于绝大多数部分中所有的PHP变量仅仅只有单独的活动范围。然而,在用户自定义的函数中,引入了一个本地函数范围的概念。在这个函数中使用的任何变量缺省被限制在该函数的本地函数范围之中。例如: 

  

$a  =  1;  /*  global  scope  */ 

Function  Test  ()  { 

echo  $a;  /*  reference  to  local  scope  variable  */  } 

Test  (); 

 

        这段脚本将不会造成任何的输出,因为给显示的提交给本地译文的变量“$a”的申明,同时这个变量没有在它的活动范围中被指定一个值。您可以注意到这和C语言有一些不同,在C语言中全局变量是自动被设定为可用的,除非在函数中进行了特别的说明。由于人们可能会不小心的改变了全局变量的值,所以这可会在程序中导致许多问题。在PHP中全局变量必须在一个函数中被公告,如果想要在这个函数中使用它的话。例子如下: 

  

$a  =  1; 

$b  =  2; 

Function  Sum  ()  { 

global  $a,  $b; 

$b  =  $a  +  $b; 



Sum  (); 

echo  $b; 

 

        上面的脚本将输出“3”。在函数中申明了全局变量$a和$b,任何对这两个变量的引用都被指定到了该全局变量。这里没有函数可以操作的限制全局变量的数目。 

  

        第二种接受全局变量的方法是使用PHP特殊的定义数组$GLOBALS,例子如下所示: 

$a  =  1; 

$b  =  2; 

  

Function  Sum  ()  { 

$GLOBALS["b"]  =  $GLOBALS["a"]  +  $GLOBALS["b"]; 



  

Sum  (); 

echo  $b; 

 

        $GLOBALS数组是一个联合数组使用“global”为变量的名字,全局变量作为该变量数组其中某个元素的值。 

  

        另一个关于变量活动范围的重要特性是“静态变量”。一个静态变量仅仅在本地函数的活动范围中存在,但是当程序离开这个范围时,它的值并不丢失。请参考下面的例子: 

  

Function  Test  ()  { 

$a  =  0; 

echo  $a; 

$a++; 



 

        这个函数每次被调用时都把变量$a置为0同时打印“0”,所以几乎是没有作用的。表达式“$a++”将增加变量的值,但是每次退出函数时变量$a就消失了。想要使用一个不丢失当前计算的记数函数,用户可以将变量$a设置为静态的,示例如下: 

  

Function  Test  ()  { 

static  $a  =  0; 

echo  $a; 

$a++; 



 

        现在,每一次当Test()函数被调用的时候,它将打印出变量$a和它当时增加之后的数值。 

       当函数被递归调用的时候,使用静态变量是一种很重要的方法。递归函数就是可以调用自身的函数。当编写递归函数的时候,必须注意可能会发生的循环定义。您必须有一个适当的方法来中断这个递归过程。下面的例子递归了10次: 

  

Function  Test  ()  { 

static  $count  =  0; 

$count++; 

echo  $count; 

if  ($count  <  10)  { 

Test  ();  } 

$count--; 

}