4.3.7 变量的作用域
PHP中的变量按其作用域的不同可以分为若干种类,如局部变量、全局变量、静态变量、动态变量、引用变量、预定义变量、外部变量等,其中引用变量已经讲过了,预定义变量和外部变量将在第5章讲解,下面对前4种变量的进行详细讲解。
4.3.7.1 局部变量与全局变量
PHP中的变量是有作用范围的,一般情况下,变量的作用域是包含变量的PHP程序块,也就是“<?php”和“?>”之间的代码或者“{”、“}”之间的代码。如果其中还有include()或require()函数包含的文件,变量的作用域也可以扩展到这些文件里。
在主程序中定义的变量只在主程序中有效,在函数中定义的变量只在函数中有效,在函数之外就无效了。
如果要在函数中引用主程序中的变量的值,要使用PHP定义的$GLOBALS数组。$GLOBALS数组是一个以变量名为下标的数组,可以直接调用。
还有一种实现跨域调用功能的方法就是使用全局变量,值得注意的是,PHP中的全局变量并不是对整个程序都可见,在主程序中可以访问函数中的全局变量,但是在函数中并不能访问主程序的全局变量。其定义的语法为:
global $变量名;
只要将变量定义为全局变量,以后访问这个变量时就不需要使用$GLOBALS数组了。程序4-25.php为就全局变量和局部变量使用示例。
<!--文件4-25.php:局部变量和全局变量--> <HTML> <HEAD> <TITLE>局部变量和全局变量</TITLE> </HEAD> <BODY> <?php $var1=6; //定义一个局部变量 echo "定义局部变量$var=".$var1; include("a.php"); function myfun1(){ echo "<br>在myfun1()函数中输出局部变量"; echo "$var1=".@$var1; } myfun1(); function myfun2(){ echo "<br>在myfun2()函数中输出局部变量"; echo "$var1=".$GLOBALS["var1"]; } myfun2(); global $var2; $var2=8; function myfun3(){ global $var3; $var3=9; echo "<br>在myfun3()函数中输出全局变量"; echo "$var2=".@$var2."<br>"; echo "$var3=".$var3; } myfun3(); echo "<br>在函数外输出全局变量"; echo "$var2=".$var2; echo " $var3=".$var3; ?> </BODY> </HTML>
被包含的a.php代码如下:
<!--文件a.php:文件4-25.php所包含的文件--> <?php echo "<br>在a.php中输出$var的值"; echo "$var1=".$var1; echo "<br>在a.php中的函数中输出$var的值"; function myfun4(){ echo "$var1=".@$var1; } myfun4(); ?>
程序4-25.php的运行结果如图4-22所示。
图4-22 程序4-25.php的运行结果
4.3.7.2 静态变量和动态变量
静态变量只能用于函数范围内,它与普通局部变量不同之处在于:当该函数运行结束时,静态变量不会丢失自己的值。静态变量的定义方法为在变量名前加“static”关键字。
PHP中的动态变量允许一个变量的值作为另一个变量的变量名,前提条件是这个值要符合变量的命名规则。其实就是前面学习过的“变量的变量”,之所以在此处再拿出来讲解,是为了与静态变量相对应。
程序4-26.php为静态变量和动态变量示例。
<!--文件4-26.php:静态变量与动态变量--> <HTML> <HEAD> <TITLE>静态变量与动态变量</TITLE> </HEAD> <BODY> <?php function fun1() { $int1=0; //定义普通变量 echo $int1." "; $int1 ; } fun1(); //输出0 fun1(); //输出还是0 echo "<br>*************<br>"; function fun2() { static $int2=0; //定义静态变量 echo $int2." "; $int2 ; } fun2(); //输出0 fun2(); //输出1 echo "<br>*************<br>"; $int=6; $var="int"; echo $$var; //输出动态变量 $$var=8; echo " ".$int; ?> </BODY> </HTML>
程序4-26.php的运行结果如图4-23所示。
图4-23 程序4-26.php的运行结果
过程序4-26.php不难看出静态变量与普通变量的区别,在函数fun2()中静态变量$int2只被初始化了一次,在该函数退出时$int2的值不会丢失,所以反复调用函数fun2()时,$int2的值会累加。
局部和全局作用域(loacal global) 在所有函数外定义的变量拥有全局作用域,在函数内部声明的变量是局部变量,仅能在函数内部访问。要在一个函数中使用全局变量,需要使用global关键字。
在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。
<!--文件4-26.php:静态变量与动态变量--> 2: <HTML> 3: <HEAD> 4: <TITLE>静态变量与动态变量</TITLE> 5: </HEAD> 6: <BODY> 7: <?php 8: function fun1() 9: { 10: $int1=0; //定义普通变量 11: echo $int1." "; 12: $int1 ; 13: } 14: fun1(); //输出0 15: fun1(); //输出还是0 16: echo "<br>*************<br>"; 17: function fun2() 18: { 19: static $int2=0; //定义静态变量 20: echo $int2." "; 21: $int2 ; 22: } 23: fun2(); //输出0 24: fun2(); //输出1 25: echo "<br>*************<br>"; 26: $int=6; 27: $var="int"; 28: echo $$var; //输出动态变量 29: $$var=8; 30 echo " ".$int; 31: ?> 32: </BODY> 33:</HTML> 这一部分的代码测试了一下,很成功
这些语法基础对于刚学习PHP的人来说是非常重要的,条理清晰,方便学习