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)。

Tip

可以參考Userland Naming Guide

有關變數的函式資訊見變數函式

<?php
$var 
'Bob';
$Var 'Joe';
echo 
"$var, $Var";      // 輸出 "Bob, Joe"

$4site 'not yet';     // 非法變更名;以數字開頭
$_4site 'not yet';    // 合法變數名;以下劃線開頭
$i站點is 'mansikka';  // 合法變數名;可以用中文
?>

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 中並不需要初始化變數,但這是個好習慣。未初始化的變數具有其類型的默認值 - FALSE,零,空字元串或者空數組。

Example#1 未初始化變數的默認值

<?php
echo ($unset_bool "true" "false"); // false
$unset_int += 25// 0 + 25 => 25
echo $unset_string "abc"// "" . "abc" => "abc"
$unset_array[3] = "def"// array() + array(3 => "def") => array(3 => "def")
?>

依賴未初始化變數的默認值在某些情況下會有問題,例如把一個文件包含到另一個之中時碰上相同的變數名。另外把 register_globals 打開是一個主要的安全隱患E_NOTICE 級別的錯誤會在碰上未初始化的變數時發出,但是在向一個未初始化的數組附加單元時不會。isset() 語言結構可以用來檢測一個變數是否已被初始化。