章 8. 變數

目錄
基礎
預定義變數
變數範圍
可變變數
PHP 的外部變數

基礎

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澌te = 'mansikka';    // valid; '洄 is 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.
?>