Forum und email

各類變數

Table of Contents

基本知識

所有 PHP 的變數都是以 "$" 為開端,後加變數名所組成的。變數名稱是有大小寫之分的。

PHP 的變數名稱和其他標籤有著相同的規則。一個有效的變數是由英文字母或底線開始,跟著是任意長短的字母、數字或底線。按正規運算式,它可以表達為:'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

Note: 字母為 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&auml;te 'mansikka';    // valid; '&auml;' 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.
?>