變量是指在程式的運作過程中随時可以發生變化的量,在代碼中可以隻使用一個變量,也可以使用多個變量,變量中可以存放單詞、數值、日期以及屬性等。變量的值是臨時的,當程式運作的時候,該值是存在的,如果程式結束,變量的值就會丢失。雖然在前面的示例中也使用到了變量,但是沒有詳細的說明,本節将詳細介紹如何建立變量,以及如何引用變量。
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
2.4.2 變量作用域
聲明變量的位置決定了變量的作用域,變量的作用域決定了程式的那些部分可以通路該變量,那些部分不可以通路該變量,在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
由上面例子知,一個可變變量擷取了一個普通變量的值作為這個可變變量的變量名。就可以作為一個可變變量的變量了,這時,兩個變量都被定義了。