變量是指在程序的運行過程中隨時可以發生變化的量,在代碼中可以只使用一個變量,也可以使用多個變量,變量中可以存放單詞、數值、日期以及屬性等。變量的值是臨時的,當程序運行的時候,該值是存在的,如果程序結束,變量的值就會丟失。雖然在前面的示例中也使用到了變量,但是沒有詳細的說明,本節將詳細介紹如何創建變量,以及如何引用變量。
2.4.1 創建變量PHP中的變量是用美元符號($)作為前綴的標示符,標識符是一個標識不同對象的符號,如變量的名稱,函數的名稱,或者其他用戶自定義對象的名稱。在PHP中,標識符的命名必須符合下面的規定:
l 標識符可以由一個或多個字符組成,但必須以字母或下划線開頭。此外,標識符只能由字母、數字、下划線字符和從127到255的其他ASCII字符組成。如my_a、Ss、_value這些標識符名稱都是合法的,而q^a、4tt這些變量的名稱是不合法的。
l 標識符區分大小寫。因此,變量$recipe不同於變量$Recipe、$rEciPe或$recipE。
l 標識符可以是任意長度。這很有好處,因為這樣一來,程序員就能通過標識符名准確地描述標識符的用途。
l 標識符名稱不能與任何PHP預定義關鍵字相同。
在創建變量的過程中,先聲明變量,再給變量賦值是一個好的習慣。由於PHP是一種弱類型語言,在聲明變量時,不需要顯示聲明變量,變量可以存放任何類型的值,在PHP中,變量在運行時進行類型檢查,並且可以用另一個不同類型的值取代變量的值,下面聲明一個變量,並且讓另一個不同類型的值取代變量的值,再為聲明一個沒有賦值的變量,具體代碼如下所示:
$what = “Yound Tang”;
$what = 25;
$name;
在PHP中,給變量賦值有兩種方式,分別為值賦值和引用賦值。值賦值是直接把一個數值通過賦值表達式復制給變量,會把該變量原來的數值覆蓋,如果在聲明變量時,沒有賦值,其行為就形同NULL。在聲明變量時賦值是一種常用的變量的賦值方法,使用示例如下所示:
$name = “唐曉陽”;
$age = “23”;
$sex = “男”;
echo “你的姓名是:”.$name.”<br/>”;
echo “你的年齡是:”.$age.”<br/>”;
echo “你的性別是:”.$sex.”<br/>”;
執行該段代碼,執行結果如下所示:
你的姓名是:唐曉陽
你的年齡是:23
你的性別是:男
在PHP中,聲明變量可以直接賦值,也可以不賦值,當需要使用變量存儲值時,可以引用變量賦值,引用賦值表示所創建的變量與另一個變量引用的內容相同。因此,如果多個變量引用了同一個內容,修改其中任意一個變量,在其余的變量上都將有所反映。在等於號后面加一個&符號就可以完成引用賦值。引用賦值的示例形式如下所示。
$value1="Hello World";
$value2=& $value1;
$value2="GoodBye";
echo $value1.”<br/>”;
echo $value2.”<br/>”;
在上述代碼中,創建一個變量value1並賦值為“Hello World”,在下面的語句中,變量$value2采用了引用賦值,即把value1的值賦給了value2,此時這兩個變量就是一個生命共同體了,當一個發生變化,另外一個就會顯示出結果,該段代碼執行結果如下所示:
GoodBye
GoodBye
聲明變量的位置決定了變量的作用域,變量的作用域決定了程序的那些部分可以訪問該變量,那些部分不可以訪問該變量,在PHP中,變量的作用域范圍可以分為四類:局部變量、函數參數、全局變量和靜態變量,本節主要介紹變量的這幾種作用域范圍。
1.局部變量
在一個函數中聲明一個變量是那個函數的局部變量,也就是說該變量只能被函數內部成員訪問,函數外部成員是不能訪問該變量,並且不可見。默認情況下,函數內部成員不能訪問函數外定義的變量(平常所說的的全局變量)。有時局部變量很有用,因為局部變量能夠消除出現一位副作用的可能性,否則這些副作用將導致可全局訪問的變量被有意或無意地修改。下面創建一個使用局部變量的示例,該示例如代碼2.13所示。
代碼2.13 使用局部變量
<?php
$count =10;
function AddCount()
{
$count = 100;
$count = $count + $count;
echo $count;
echo "<br/>";
}
AddCount();
echo $count;
?>
執行代碼2.13,執行結果如下所示:
200
10
有輸出結果知,該段代碼輸出了兩個不同的值,這是因為函數AddCount函數中的變量為局部變量,修改局部變量的值不會影響函數外部的任何值,函數中的變量在程序結束時被拋棄,所以全局變量值還是10。
2.函數參數
在PHP中,函數可以接受相應的參數,雖然這些參數是接受函數外部的值,但退出函數后就無法訪問這些參數,在函數執行結束后,參數的值就會消失,和函數的執行有很大的關系。函數參數是在函數后面的括號內聲明,下面使用該參數創建一個示例,該示例如代碼2.14所示。
代碼2.14 運用函數參數
<?php
function EchoNum($age,$class)
{
echo "你的年齡是:".$age."<br/>";
echo "所在班級:".$class;
}
EchoNum(18,"計算機技術與科學系08級5班");
?>
執行該段代碼,執行結果如下所示:
你的年齡是:18
所在班級:計算機技術與科學系08級5班
函數參數也可以稱為是局部變量,意味着這些參數只在函數內部起作用,在函數的外部不能訪問這些變量,同樣當函數執行結束時,變量同樣也會撤銷。
3.全局變量
全局變量可以在整個PHP程序中,任何地方訪問,但是如果要修改一個全局變量,必須在修改該變量的函數中顯式的聲明為全局變量,在函數中顯示聲明全局變量很簡單,只需在函數中使用global關鍵字聲明就可以,下面創建一個使用全局變量的示例,具體講解在函數中如何修改全局變量,該示例如代碼2.15所示。
代碼2.15 在函數中修改全局變量
<?php
function AddNum()
{
global $num;
$num = $num + $num ;
echo $num ;
}
$num = 100;
AddNum();
?>
執行代碼2.15,執行結果如下所示:
200
如果不在$num前加global,該變量會被認為是局部變量,此時頁面上顯示的值為0;添加global后,就可以修改全局變量了,聲明全局變量還有另外一種方法,那就是使用PHP的$GLOBALS數組,使用該數組和使用global的效果一樣,下面創建一個使用$GLOBALS數組的示例,該示例如代碼2.16所示。
代碼2.16 使用$GLOBALS數組
<?php
function AddNum()
{
$GLOBALS['num'] =$GLOBALS['num']+$GLOBALS['num'] ;
echo "該值是:".$GLOBALS['num'] ;
}
$num = 100;
AddNum();
?>
執行代碼2.16,執行結果如下所示:
該值是:200
| 在使用全局變量時,一定要注意,因為使用全局變量很容易發生意外。 |
4.靜態變量
靜態變量在兩次調用函數之間其值不變,靜態變量僅在局部函數域中聲明,用關鍵字static可以聲明一個靜態變量。靜態變量在函數退出時,不會丟失值,並且再次調用此函數時,還能保留值。下面創建一個使用靜態變量的示例,該示例如代碼2.17所示。
代碼2.17 使用靜態變量
<?php
function keepNum()
{
static $num =0;
$num ++;
echo "現在靜態變量的值是:".$num;
echo "<br/>";
}
$num = 10;
echo "變量num的值是:".$num."<br/>";
keepNum();
keepNum();
?>
執行代碼2.17,執行結果如下所示:
變量num的值是:10
現在靜態變量的值是:1
現在靜態變量的值是:2
由代碼2.17執行結果知,由於在函數中指明了變量為靜態變量,因此在執行函數時保留了前面的值。
2.3.3 變量的變量創建一個變量,需要該變量賦值,當然也可以引用賦值,有時候也需要使用該變量的內容作為變量名,也就是說這個變量存放在另一個變量中。定義變量的變量只需要在變量的前面再添加一個美元符號即可。下面創建一個示例,該示例代碼如下所示:
<?php
$name = "Yound";
$$name = " Tang";
echo $name.$$name;
?>
執行該端代碼,執行結果如下所示:
Yound Tang
由上面例子知,一個可變變量獲取了一個普通變量的值作為這個可變變量的變量名。就可以作為一個可變變量的變量了,這時,兩個變量都被定義了。
