1
2
3
4
5
6
7
8
9
10
11

變量的作用域

發(fā)布時間:2017-07-20 07:57   發(fā)布人:毛書朋   浏覽次數:7093


關聯課件:4子項目四 - 變量的作用域 (點擊在線預覽)



4.3.7  變量的作用域

      PHP中的變量按其作用域的不同可以分爲若幹種(zhǒng)類,如局部變量、全局變量、靜态變量、動态變量、引用變量、預定義變量、外部變量等,其中引用變量已經(jīng)講過(guò)了,預定義變量和外部變量將(jiāng)在第5章講解,下面(miàn)對(duì)前4種(zhǒng)變量的進(jìn)行詳細講解。

4.3.7.1  局部變量與全局變量   

     PHP中的變量是有作用範圍的,一般情況下,變量的作用域是包含變量的PHP程序塊,也就是“<?php”和“?>”之間的代碼或者“{”、“}”之間的代碼。如果其中還(hái)有include()或require()函數包含的文件,變量的作用域也可以擴展到這(zhè)些文件裡(lǐ)。

     在主程序中定義的變量隻在主程序中有效,在函數中定義的變量隻在函數中有效,在函數之外就無效了。

如果要在函數中引用主程序中的變量的值,要使用PHP定義的$GLOBALS數組。$GLOBALS數組是一個以變量名爲下标的數組,可以直接調用。

       還(hái)有一種(zhǒng)實現跨域調用功能(néng)的方法就是使用全局變量,值得注意的是,PHP中的全局變量并不是對(duì)整個程序都(dōu)可見,在主程序中可以訪問函數中的全局變量,但是在函數中并不能(néng)訪問主程序的全局變量。其定義的語法爲:

global      $變量名;

      隻要將(jiāng)變量定義爲全局變量,以後(hòu)訪問這(zhè)個變量時就不需要使用$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  靜态變量和動态變量

       靜态變量隻能(néng)用于函數範圍内,它與普通局部變量不同之處在于:當該函數運行結束時,靜态變量不會丢失自己的值。靜态變量的定義方法爲在變量名前加“static”關鍵字。

       PHP中的動态變量允許一個變量的值作爲另一個變量的變量名,前提條件是這(zhè)個值要符合變量的命名規則。其實就是前面(miàn)學(xué)習過(guò)的“變量的變量”,之所以在此處再拿出來講解,是爲了與靜态變量相對(duì)應。

 程序4-26.php爲靜态變量和動态變量示例。

<!--文件4-26.php:靜态變量與動态變量-->
<HTML>
<HEAD>
    <TITLE>靜态變量與動态變量</TITLE>
</HEAD>
<BODY>
    <?php
        function fun1()
        {
            $int1=0;        //定義普通變量
            echo $int1."&nbsp;";
            $int1  ;
        }
        fun1();                     //輸出0
        fun1();                     //輸出還(hái)是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的運行結果

        過(guò)程序4-26.php不難看出靜态變量與普通變量的區别,在函數fun2()中靜态變量$int2隻被初始化了一次,在該函數退出時$int2的值不會丢失,所以反複調用函數fun2()時,$int2的值會累加。



  • 趙博文 2018-01-07 16:03:52
    局部和全局作用域(loacal global) 在所有函數外定義的變量擁有全局作用域,在函數内部聲明的變量是局部變量,僅能(néng)在函數内部訪問。要在一個函數中使用全局變量,需要使用global關鍵字。
  • 趙博文 2018-01-07 16:04:37
    在用戶自定義函數中,一個局部函數範圍將(jiāng)被引入。任何用于函數内部的變量按缺省情況將(jiāng)被限制在局部函數範圍内。
  • 嶽猛 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(); //輸出還(hái)是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> 這(zhè)一部分的代碼測試了一下,很成(chéng)功
  • 甄丹丹 2018-01-09 16:30:02
    這(zhè)些語法基礎對(duì)于剛學(xué)習PHP的人來說是非常重要的,條理清晰,方便學(xué)習