- PHP網絡編程學習筆記
- 宗杰等編著
- 2007字
- 2019-01-01 14:11:28
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變量

續表

- Python入門很簡單
- Docker進階與實戰
- Arduino by Example
- 劍指Offer(專項突破版):數據結構與算法名企面試題精講
- MATLAB 2020 從入門到精通
- Learning Python by Building Games
- 程序是怎樣跑起來的(第3版)
- Mastering JavaScript Design Patterns(Second Edition)
- Angular開發入門與實戰
- 編程改變生活:用Python提升你的能力(進階篇·微課視頻版)
- Maker基地嘉年華:玩轉樂動魔盒學Scratch
- Distributed Computing in Java 9
- Scala Functional Programming Patterns
- 基于GPU加速的計算機視覺編程:使用OpenCV和CUDA實時處理復雜圖像數據
- SAP Web Dynpro for ABAP開發技術詳解:基礎應用