基礎
PHP 中一個美元符號後面跟上一個變量名稱,即表示一個變量。變量的名稱是對大小寫敏感的。
變量名與 PHP 中其它的標簽一樣遵循相同的規則。一個有效的變量名由字母或者下劃線開頭,後面跟上任意數量的字母,數字,或者下劃線。按照正常的正則表達式,它將被表述為:'[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 提供了另外一種方式給變量賦值:傳地址賦值。這意味著新的變量簡單的引用(換言之,“成為其別名” 或者 “指向”)了原始變量。改動新的變量將影響到原始變量,反之亦然。這同樣意味著其中沒有執行復制操作;因而,這種賦值操作更加快速。盡管如此,任何提速的操作只有在緊密循環或者大數組或者對象才可能被注意到。
使用傳地址賦值,簡單地追加一個(&)符號到將要賦值的變量前(源變量)。例如,下列代碼片斷兩次輸出‘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 以及後續版本中,PHP 指令 register_globals 的默認值為 off。這是 PHP 的一個主要變化。讓 register_globals 的值為 off 將影響到預定義變量集在全局范圍內的有效性。例如,為了得到 DOCUMENT_ROOT 的值,你將必須使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT,又如,使用 $_GET['id'] 來代替 $id 從 URL