PHP 中一個美元符號后面跟上一個變量名稱,即表示一個變量。變量的名稱是對大小寫敏感的。變量名與 PHP 中其它的標簽一樣遵循相同的規(guī)則。一個有效的變量名由字母或者下劃線開頭,后面跟上任意數(shù)量的字母,數(shù)字,或者下劃線。按照正常的正則表達式,它將被表述 為:'[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*’
AD:
基礎
PHP 中一個美元符號后面跟上一個變量名稱,即表示一個變量。變量的名稱是對大小寫敏感的。
變量名與 PHP 中其它的標簽一樣遵循相同的規(guī)則。一個有效的變量名由字母或者下劃線開頭,后面跟上任意數(shù)量的字母,數(shù)字,或者下劃線。按照正常的正則表達式,它將被表述為:'[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*’
注: 字母為 a-z,A-Z,ASCII 字符從 127 到 255(0x7f-0xff)。
<?php $var = "Bob"; $Var = "Joe"; echo "$var, $Var"; // outputs "Bob, Joe" $4site = 'not yet'; // invalid; starts with a number $_4site = 'not yet'; // valid; starts with an underscore $t?yte = 'mansikka'; // valid; '洄 is (Extended) ASCII 228. ?> |
PHP 3 中,變量總是傳值賦值。那也就是說,當你將一個表達式的值賦予一個變量時,整個原始表達式的值被賦值到目標變量。這意味著,例如,當一個變量的值賦予另外 一個變量時,改變其中一個變量的值,將不會影響到另外一個變量。有關這種類型的賦值操作,請參閱表達式一章。
PHP 4 提供了另外一種方式給變量賦值:傳地址賦值。這意味著新的變量簡單的引用(換言之,“成為其別名” 或者 “指向”)了原始變量。改動新的變量將影響到原始變量,反之亦然。這同樣意味著其中沒有執(zhí)行復制操作;因而,這種賦值操作更加快速。盡管如此,任何提速的 操作只有在緊密循環(huán)或者大數(shù)組或者對象才可能被注意到。
使用傳地址賦值,簡單地追加一個(&)符號到將要賦值的變量前(源變量)。例如,下列代碼片斷兩次輸出‘My name is Bob’:
<?php $foo = 'Bob'; // Assign the value 'Bob' to $foo $bar = &$foo; // Reference $foo via $bar. $bar = "My name is $bar"; // Alter $bar... echo $bar; echo $foo; // $foo is altered too. ?> |
需要注意的是只有命名變量才可以傳地址賦值,這一點非常重要。
<?php $foo = 25; $bar = &$foo; // This is a valid assignment. $bar = &(24 * 7); // Invalid; references an unnamed expression. function test() { return 25; } $bar = &test(); // Invalid. ?> |
預定義變量
PHP 提供了大量的預定義變量。由于許多變量依賴于運行的服務器的版本和設置,及其它因素,所以并沒有詳細的說明文檔。一些預定義變量在 PHP 以命令行形式運行時并不生效。有關這些變量的詳細列表,請參閱“保留的預定義變量”一章。
警告
PHP 4.2.0 以及后續(xù)版本中,PHP 指令 register_globals 的默認值為 off。這是 PHP 的一個主要變化。讓 register_globals 的值為 off 將影響到預定義變量集在全局范圍內(nèi)的有效性。例如,為了得到 DOCUMENT_ROOT 的值,你將必須使用 $_SERVER[‘DOCUMENT_ROOT’] 代替 $DOCUMENT_ROOT,又如,使用 $_GET[‘id’] 來代替 $id 從 URL http://www.example.com/test.php?id=3 中獲取 id 值,亦或使用 $_ENV[‘HOME’] 來代替 $HOME 獲取環(huán)境變量 HOME 的值。
更多相關信息,請閱讀配置項目 register_globals,有關安全性的一章使用 Register Globals,以及 PHP 4.1.0 和 4.2.0 的發(fā)行通告.
請優(yōu)先使用可用的 PHP 預定義變量,如 超級全局數(shù)組。
從 PHP 4.1.0 開始,PHP 提供了一套附加的預定數(shù)組,這些數(shù)組變量包含了來自 Web 服務器(如果可用),運行環(huán)境,和用戶輸入的數(shù)據(jù)。這些數(shù)組非常特別,它們在全局范圍內(nèi)自動生效,例如,在任何范圍內(nèi)自動生效。為此,它們常因是 “autoglobals” 或者 “superglobals” 而聞名。(PHP 中尚且沒有一種可使用戶自定義超級全局變量的機制)超級全局變量羅列于下文中;但是為了得到它們的內(nèi)容和關于 PHP 預定義變量的進一步的討論以及它們的本質(zhì),請參閱預定義變量。而且,你也將注意到舊的預定義數(shù)組($HTTP_*_VARS)仍舊存在。自 PHP 5.0.0 起,冗長的 PHP 預定義變量可以通過設置 register_long_arrays 來屏蔽。
可變變量: 超級全局變量不能被用作可變變量.
如果某些 variables_order 中的變量沒有設定,它們的對應的 PHP 預定義數(shù)組也是空的。