1
2
3
4
5
6
7
8
9
10
11

变量的作用域

发布时间:2017-07-20 07:57   发布人:毛书朋   浏览次数:7434


关联课件:4子项目四 - 变量的作用域 (点击在线预览)



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.jpg

图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."&nbsp;";
            $int1  ;
        }
        fun1();                     //输出0
        fun1();                     //输出还是0
        echo "<br>*************<br>";
        function fun2()
        {
            static $int2=0;          //定义静态变量
            echo $int2."&nbsp;";
            $int2  ;
        }
        fun2();                     //输出0
        fun2();                     //输出1
        echo "<br>*************<br>";
        $int=6;
        $var="int";
        echo $$var;                 //输出动态变量
        $$var=8;
        echo "&nbsp;".$int;
    ?>
</BODY>
</HTML>

程序4-26.php的运行结果如图4-23所示。

4-23.jpg

图4-23  程序4-26.php的运行结果

        过程序4-26.php不难看出静态变量与普通变量的区别,在函数fun2()中静态变量$int2只被初始化了一次,在该函数退出时$int2的值不会丢失,所以反复调用函数fun2()时,$int2的值会累加。



  • 赵博文 2018-01-07 16:03:52
    局部和全局作用域(loacal global) 在所有函数外定义的变量拥有全局作用域,在函数内部声明的变量是局部变量,仅能在函数内部访问。要在一个函数中使用全局变量,需要使用global关键字。
  • 赵博文 2018-01-07 16:04:37
    在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。
  • 岳猛 2018-01-09 16:25:09
    <!--文件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."&nbsp;"; 12: $int1 ; 13: } 14: fun1(); //输出0 15: fun1(); //输出还是0 16: echo "<br>*************<br>"; 17: function fun2() 18: { 19: static $int2=0; //定义静态变量 20: echo $int2."&nbsp;"; 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 "&nbsp;".$int; 31: ?> 32: </BODY> 33:</HTML> 这一部分的代码测试了一下,很成功
  • 甄丹丹 2018-01-09 16:30:02
    这些语法基础对于刚学习PHP的人来说是非常重要的,条理清晰,方便学习