變數是指在程式執行過程中數值可以變化的量。變數通過一個名字(變數名)來標識。系統為程式中的每一個變數分配一個儲存單元,變數名實質上就是電腦記憶體單元的名稱。因此,藉助變數名即可 訪問記憶體中的資料。
一、變數的聲明及使用
在PHP中使用變數之前不需要聲明變數,只需為變數賦值即可。PHP中的變數名稱用$和標識符表示,變數名是區分大小寫。
變數賦值,是指給變數一個具體的資料值,對於字串和數字類型的變數,可以通過“=”來實現賦值。格式為:
<?php $name = value; ?>
對變數賦值時,要遵循變數命名規則。如下面的變數名為合法的:
<?php$this = "yes";$_class = "roof";?>
而下面的變數命名則是非法的:
<?php $111_var = 111; //變數名不能以數字字元開頭$@spcn = "spcn"; //變數名不能以字母和底線以外的其他字元開頭。?>
除了直接賦值外,還有兩種方式可以為變數聲明或賦值。
1. 變數間的賦值
定義:變數間的賦值指賦值後兩個變數使用各自的記憶體,互不干擾,執行個體如下:
<?php$string1 = "yes"; //聲明變數string1$string2 = $string1; //使用$string1 初始化$string2$string1 = "no"; //改變變數$string1 的值echo $string2; //輸出變數$string2 的值?>
輸出:yes 。
2. 引用賦值
引用賦值的概念是從PHP4開始的,即用不同的名字訪問同一個變數內容。當改變其中一個變數的值時,另一個也跟著發生變化。使用“&”符號來表示引用。執行個體如下:
<?php$i = "spcn"; //聲明變數$i$j = &$i; //使用引入賦值,這時$j已經賦值為spcn$i = "hello,$i"; //重新給$j賦值echo $j; //輸出變數$jecho "<br>";echo $i; //輸出變數$i?>
輸出結果為:
hello,spcnhello,spcn
在本例中,變數$j是變數$i的引用,當給變數$i賦值後,$j的值也會隨之發生變化。
二、變數的範圍
變數在使用時,壓負荷變數的定義規則。變數必須在有效時間範圍內使用,如果變數超出有效範圍,則變數也就失去意義了。
變數的範圍如下:
局部變數: 在函數的背部定義的變數,其範圍是所在函數
全域變數: 被定義在所有函數以外的變數,其範圍是整個PHP檔案,但在使用者自訂函數內部是停用。如果希望在使用者自訂函數內部使用全域變數,則要使用 global 關鍵字聲明全域變數
靜態變數: 能夠在函數調用結束後仍保留變數值.當再次回到其範圍時.又可以繼續使用原來的值。而一般變數是在函數調用結束後.其儲存的資料值即被清除,所佔的記憶體空間也被釋放。使用靜態變數時.先要用關鍵字 static 來聲明變最.把關鍵字static放在要定義的變數之前
在函數內部定義的變數.其範圍為所在函數,如果在函數外賦值,將被認為是完全不同的另一個變數。在退出聲明變數的函數時。該變數及相應的值就會被清除。
<?php $int_a=0; //初始全域變數$int_a將其賦值為0 echo "全域變數:".$int_a; //列印全域變數 function child_a(){ //局部變數的使用 $int_a=0; //這裡是局部變數,雖然與全域變數名相同但此變數僅在child_a內可見 echo "Fromchild_a:".$int_a; } function child_b(){ //調用全域變數 global $int_a; //聲明調用全域變數 echo "Fromchild_b:".$int_a; } ?>
從上面的一個例子,我們可以很簡單明了的看明白PHP中全域與局部變數之間的差距...
另我們高興的是PHP提供了其他的CGI語言的伺服器全域變數...這些變數當頁面調入的時候就已經由系統自動產生
這些全域變數包含在
$_SERVER($HTTP_SERVER_VARS)(伺服器提供的相關變數服務) PHP4.1.0
$_ENV($HTTP_ENV_VARS) (儲存相關環境變數) PHP4.1.0
$_POST (儲存使用Form post方法提交的變數) PHP4.1.0
$_GET (儲存使用Form GET/URI方法提交的變數) PHP4.1.0
$_COOKIE (儲存使用頁面獲得的COOKIE資料) PHP4.1.0
$_SESSION (儲存網站內會話變數) PHP4.1.0
$HTTP_POST_VARS (同$_POST, 評論是$_POST的效率比其更高) PHP4.1.0
$HTTP_GET_VARS (同$_GET,評論同上.) PHP4.1.0
$_REQUEST (包含了$_GET,$_POST,$_COOKIE,$_FILES) PHP4.1.0
$_FILES (嚴格的說此變數已經包含在$_POST和$HTTP_POST_VARS,主要是獲得form post方式提交的file變數)PHP4.1.0
$GLOBALS (儲存所有全域變數的數組) PHP3.0.0
$php_errormsg (此全域變數必須在php.ini中將其開啟:track_error=on)
以上變數為系統全域變數,您不需要聲明他們就可以直接使用,當然了,您的PHP版本一定要高於或等於他們後面所標註的版本號碼。
在使用這些變數的時候,您無需用global關鍵字來聲明他們...
<?php function g_p(){ echo "Welcome".$_SERVER[REMOTE_ADDR].". nice meet you I am".$_SERVER[SERVER_ADDR]; // Welcome 192.168.0.3.nice meet you I am 192.168.0.1 } ?>
三、可變變數
PHP還提供了變數的變數這個概念
可變變最是一種獨特的變數,它允許動態改變一個變最名稱。其工作原理是該變數的名稱由另外一個變數的值來確定,實現過程就是在變數的前面再多加一個貨幣符號“$”。
下面使用可變變最動態改變變最的名稱。首先定義兩個變數$change_name和$trans.並且輸出變數$change_name的值,然後使用可變變數來改變變數$change_name的名稱,最後輸出改變名稱後的變數值,執行個體代碼如下:
<?php $change_name = "trans"; //聲明變數 $trans = "you can see"; echo $change_name; //輸出變數$change_name echo "<br>"; echo $$change_name; //通過可變變數輸出$trans?>
輸出結果為:
transyou can see