官术网_书友最值得收藏!

3.3 變量與常量

顧名思義,變量就是在PHP程序執行過程中可以改變其值的量,常量就是在PHP程序執行過程中不可以改變其值的量。

變量名由一個合法的PHP字符串來表示,變量的值可以改變。常量分為內容常量和字符常量。內容常量是指其具有固定值或內容的字符串本身,比如3.14、"WindowsXP"本身就是常量,其值具有唯一確定性。字符常量是指用常量名來表示一個恒定的值。

3.3.1 定義常量

常量的使用是將程序中多處相同的內容用一個常量表示,可以簡化程序和增加可讀性。當定義了常量后,可以在以后的腳本語句中使用這個常量。通常在程序文件的開頭部分定義常量,根據需要對其更改較為容易。

常量具有以下3個特點:

1 必須用函數define()定義。

2 定義完后其值不能再被改變。

3 使用時直接用常量名,不能像變量一樣在前面加$。

例如:

PHP語言中預定義了一些常量,用戶不必再去定義即可直接使用,我們稱它們為系統常量。除了為數不多的內核系統常量外,很多系統常量是由不同的擴展庫定義的,只有在加載了這些擴展庫時才會出現。下面列舉4個系統常量。

1 FILE:PHP程序文件名

2 LINE:PHP程序文件的行數

3 PHP_VERSION:當前PHP解析器的版本號

4 PHP_OS:執行當前PHP解析器的操作系統名稱

3.3.2 變量的作用范圍

PHP中的變量用一個美元符號后面跟變量名來表示,變量名是區分大小寫的。變量名與PHP中的其他標簽一樣遵循相同的規則。一個有效的變量名由字母或者下畫線開頭,后面跟上任意數量的字母、數字或者下畫線。變量名中可以包含中文,不過不建議使用含有中文的變量名,因為在不同的網絡上傳輸時會產生錯誤。

在命名變量時,應該使用易于辨認、有實質意義的字符串,比如:$name、$color等。

變量賦值有兩種方式,傳值賦值和引用賦值。

傳值賦值是將一個表達式的值賦予一個變量。一般情況下,使用=進行傳值賦值。也可以使用定界符<<<將字符串賦值給一個變量。例如:

                    $name="Yao Ming";
                    $sum=123+456;
                    $str_ A= <<<EOD白日依山盡,\n黃河入海流。\n欲窮千里目,\n更上一層樓。EOD;

這種賦值方式將整個原始表達式的值傳到目標變量。用這種方式將源變量的值賦予目標變量時,改變其中目標變量的值,將不會影響到源變量的值。源變量和目標變量在存儲系統中是互相獨立的,傳值賦值實際上在存儲系統中執行了復制操作,如圖3-4所示。

圖3-4 傳值賦值的變量值變化示意圖

引用賦值是新變量簡單地引用了原始變量,換言之,新變量成為了原始變量的別名或者指向了原始變量,意味著沒有執行復制操作,它們的值或內容在存儲系統中位于同一位置。這樣,改動新的變量將影響到原始變量,反之亦然。因而,這種賦值操作更加快速。

引用賦值使用專門的操作符&,如圖3-5所示。

圖3-5 引用賦值的變量值變化示意圖

                          echo $name2;           //輸出顯示:My name is Tom
                          echo $name1;           //輸出顯示:My name is Tom

只有確定名字的變量才可以引用賦值,其他情況將會發生錯誤。

例如:

        $sum=&(123+456);  //錯誤
        function dollar()
        {
          return 7.89;
        }
        $a=&dollar();   //錯誤

當一個變量的值是另一個變量的變量名時,這個變量稱為可變變量或動態變量。

例如:

        $height=182;
        $tom_height="height";
        echo $$tom_height;  //相當于$height,顯示182

變量的作用范圍也就是它的生效范圍,范圍跨度是定義這個變量的PHP文件。包含了在PHP文件中使用include和require引入的文件。例如:

        $a = 1000;
          include 'b.php';

這里變量$a將會在包含文件b.php中生效,可以使用。

若變量是在用戶自定義函數中定義的,那么默認情況下將被限制在局部函數范圍內。

例如:

        $a =1000;
          function Test()
          {
          echo $a;  //此句不會有任何輸出
          echo global $a;  //此句會輸出1000
          }
          Test();

上述程序中用戶自定義函數的第1句不會有輸出,因為在Test()范圍內沒有定義變量$a。而第2句會輸出1000,是因為在$a前加上了關鍵字global,使用了函數外定義的變量$a。

使用關鍵字global定義的變量被稱為全局變量,可以在定義該變量的范圍外使用。同樣,可以在用戶自定義函數范圍內用關鍵字global指向函數范圍外的變量使用。

例如:

        function Test()
            {
            global $a=1000;
            }
            Test();
            $b=$a+1000;
            echo $b;  //$b的值等于2000
          $a=123;
              $b=456;
              function Sum()
                {
                global $a, $b;
                $b=$a+$b;  //$b的值等于123+456,即579
              }
              Sum();
              echo $b;  //顯示579

全局范圍內訪問變量的另一個辦法,是PHP預定義變量中的超全局變量$GLOBALS數組。$GLOBALS數組包含一個引用,該引用指向每個當前腳本程序的全局范圍內有效的變量。該數組元素的鍵名為全局變量的名稱。

例如:

              $a=123;
                $b=456;
                function Sum()
                {
                $GLOBALS['b']=$GLOBALS['a']+$GLOBALS['b'];
                }
                Sum();
                echo $b;  //輸出579

3.3.3 變量的生存期

變量的生存期是指變量可供使用的時間段。形象地講,變量的生存期就是變量的“壽命”。變量在其生存期內都是有效的,超過其生存期,變量將會失效,這時變量不再存在,也就不能訪問到該變量的值。

用戶自定義函數在執行時所產生的變量,在函數結束時就消失了。有時因為程序的需要,當不希望變量在每次執行完函數就消失時,這種情況需要使用靜態變量。定義靜態變量的關鍵字是static。

例如:

                function Test()
                {
                    static $a=0;
                    echo $a;
                    $a++;
                }
                Test();
                Test();

因為將$a定義為靜態變量,所以每次調用Test()函數都會輸出$a的值并加一。

全局變量的生存期僅限于定義其自身的程序文件中,當程序文件執行結束或被關閉后,全局變量也就消失了。

靜態變量的作用范圍和局部變量相同,而生存期和全局變量相同。

3.3.4 預定義變量

PHP提供了大量的預定義變量,也叫系統變量。許多預定義變量依賴于運行的服務器的版本和PHP配置文件的設置。

使用phpinfo()函數可以查看當前PHP環境中的系統變量及其具體值,如表3-3所示。

表3-3 PHP變量

續表

主站蜘蛛池模板: 贡觉县| 福清市| 普安县| 土默特右旗| 开江县| 萨嘎县| 盈江县| 太仓市| 陕西省| 汶上县| 抚松县| 台北县| 苏州市| 平武县| 馆陶县| 漯河市| 梓潼县| 东兴市| 出国| 扶风县| 娱乐| 汪清县| 肇东市| 聂拉木县| 石泉县| 河西区| 怀化市| 绥化市| 平山县| 正安县| 吉首市| 县级市| 镇巴县| 军事| 鹿邑县| 恩平市| 琼结县| 泸溪县| 临武县| 定安县| 余庆县|