PHP3中文参考手册 中文翻译:Sadly sadly@21cn.com http://wansoft.soim.net | ||
---|---|---|
上一页 | 第五章语法结构 | 下一页 |
变量的作用域就是它的有效范围。对于大多数PHP的变量只有一个作用域域。在用户自定义函数里采用局部变量作用域。所有的函数内使用的变量被设置为局部变量。例如:
$a=1; /* global scope */ Function Test() { echo $a; /* reference to local scope variable */ } Test();
这段程序不会输出任何的东西因为echo语句要输出局部变量 $a ,而函数内的 $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数组是用全局变量的名字做键值,而该变量的值做对应数组元素值的关联数组。
作用域的另外一个重要的值得注意的地方是static 变量。一个 static变量存在于局部函数中,但当程序离开这个函数时它的值不会丢失。考虑下面的例子:
Function Test() { $a=0; echo $a; $a++; }
这个函数是没用的,因为每次调用时它都先把$a赋为 0 然后打出"0"。 对$a++的自加没有任何效果因为函数调用结束后变量$a 就被释放了。要使记数程序有效记数而不丢掉当前的记数结果,$a 要声名为static变量:
Function Test() { static $a=0; echo $a; $a++; }
现在,每次调用Test()函数它都会打出$a的值并把增加它的值。
当使用递归函数是静态变量是必不可少的。递归函数就是调用自己的函数。写递归函数时一定要十分小心,因为它的循环次数不确定。你必须确保有足够的条件结束递归过程。下面是一个简单的递归函数记数到10:
Function Test() { static $count=0; $count++; echo $count; if($count < 10) { Test(); } }