PHP 中的變量用一個美元符號($)后面跟變量名來表示。變量名是區分大小寫的。
變量名與 PHP 中其它的標簽一樣遵循相同的規則。一個有效的變量名由字母或者下劃線開頭,后面跟上任意數量的字母,數字,或者下劃線。按照正常的正則表達式,它將被表述為:'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'。
Note: 在此所說的字母是 a-z,A-Z,以及 ASCII 字符從 127 到 255(0x7f-0xff)。
Note: $this 是一個特殊的變量,它不能被賦值。
Tip
請參見用戶空間命名指南。
### 有關變量的函數信息見變量函數。
~~~
<?php
$var = 'Bob';
$Var = 'Joe';
echo "$var, $Var"; // 輸出 "Bob, Joe"
$4site = 'not yet'; // 非法變量名;以數字開頭
$_4site = 'not yet'; // 合法變量名;以下劃線開頭
$i站點is = 'mansikka'; // 合法變量名;可以用中文
?>
~~~
**變量默認總是傳值賦值**。那也就是說,當將一個表達式的值賦予一個變量時,整個原始表達式的值被賦值到目標變量。這意味著,例如,當一個變量的值賦予另外一個變量時,改變其中一個變量的值,將不會影響到另外一個變量。有關這種類型的賦值操作,請參閱表達式一章。
PHP 也提供了另外一種方式給變量賦值:引用賦值。這意味著新的變量簡單的引用(換言之,“成為其別名” 或者 “指向”)了原始變量。改動新的變量將影響到原始變量,反之亦然。
使用引用賦值,簡單地將一個 & 符號加到將要賦值的變量前(源變量)。例如,下列代碼片斷將輸出“My name is Bob”兩次:
~~~
<?php
$foo = 'Bob'; // 將 'Bob' 賦給 $foo
$bar = &$foo; // 通過 $bar 引用 $foo
$bar = "My name is $bar"; // 修改 $bar 變量
echo $bar;
echo $foo; // $foo 的值也被修改
?>
~~~
有一點重要事項必須指出,那就是只有有名字的變量才可以引用賦值。
~~~
<?php
$foo = 25;
$bar = &$foo; // 合法的賦值
$bar = &(24 * 7); // 非法; 引用沒有名字的表達式
function test()
{
return 25;
}
$bar = &test(); // 非法
?>
~~~
雖然在 PHP 中并不需要初始化變量,但對變量進行初始化是個好習慣。未初始化的變量具有其類型的默認值 - 布爾類型的變量默認值是 FALSE,整形和浮點型變量默認值是零,字符串型變量(例如用于 echo 中)默認值是空字符串以及數組變量的默認值是空數組。
### 未初始化變量的默認值
~~~
<?php
// Unset AND unreferenced (no use context) variable; outputs NULL
var_dump($unset_var);
// Boolean usage; outputs 'false' (See ternary operators for more on this syntax)
echo($unset_bool ? "true\n" : "false\n");
// String usage; outputs 'string(3) "abc"'
$unset_str .= 'abc';
var_dump($unset_str);
// Integer usage; outputs 'int(25)'
$unset_int += 25; // 0 + 25 => 25
var_dump($unset_int);
// Float/double usage; outputs 'float(1.25)'
$unset_float += 1.25;
var_dump($unset_float);
// Array usage; outputs array(1) { [3]=> string(3) "def" }
$unset_arr[3] = "def"; // array() + array(3 => "def") => array(3 => "def")
var_dump($unset_arr);
// Object usage; creates new stdClass object (see http://www.php.net/manual/en/reserved.classes.php)
// Outputs: object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }
$unset_obj->foo = 'bar';
var_dump($unset_obj);
?>
~~~
依賴未初始化變量的默認值在某些情況下會有問題,例如把一個文件包含到另一個之中時碰上相同的變量名。另外把 **register_globals** 打開是一個主要的安全隱患。使用未初始化的變量會發出 E_NOTICE 錯誤,但是在向一個未初始化的數組附加單元時不會。isset() 語言結構可以用來檢測一個變量是否已被初始化。
- 入門指引
- 簡介
- PHP是什么
- PHP能做什么
- 簡明教程
- 學PHP需要什么
- 我的第一個PHP頁面
- 實用的PHP腳步
- PHP是如何處理表單的
- 在新版本的PHP如何實用舊的PHP代碼
- 下一步需要做什么
- PHP語言參考
- PHP基本語法
- PHP標記
- PHP多進程管理-pcntl_fork
- PHP文件上傳易犯錯誤
- PHP從HTML中分離
- PHP的指令分隔符
- PHP序列化serialize
- PHP類常量
- PHP Traits
- 從 HTML 中分離
- 注釋
- PHP數據類型
- PHP支持的類型簡介
- 布爾類型(Boolean)就是易經知識
- 整型(integer)即整數
- 浮點型(float)
- 字符串(string)
- 數組(Array)
- 對象(object)一定要搞
- 資源類型(resource)
- PHP安裝與環境配置
- 安裝前需要考慮的事項
- Unix系統下安裝PHP
- Unix 系統下安裝 Apache 1.3.x
- Unix 系統下安裝 Apache 2.x
- Unix 系統下安裝 Nginx 1.4.x
- Unix 平臺安裝 Lighttpd 1.4
- Sun Solaris 上的 Sun、iPlanet 和 Netscape 服務器
- CGI 命令行設置
- 針對 HP-UX 平臺的安裝提示
- 在 OpenBSD 系統下的安裝PHP
- Debian GNU/Linux 安裝說明
- 在Mac OS X 系統下安裝PHP
- 使用軟件包
- 使用內置的 PHP
- Windows 系統下的安裝
- 云計算平臺上的安裝
- Microsoft Azure
- 在亞馬遜(Amazon EC2)安裝PHP
- PHP語法參考
- 類型
- NULL
- Callback 回調類型
- 本文檔中使用的偽類型與變量
- 類型轉換的判別
- PHP 類型比較表
- 常量和變量
- 語法基礎
- 預定義變量
- 變量范圍
- 可變變量
- 外部變量
- 常量
- 語法
- 魔術常量
- PHP表達式&運算符
- 賦值運算符
- 位運算符
- 比較運算符
- 錯誤控制運算符
- 執行運算符
- 遞增/遞減運算符
- 邏輯運算符
- 字符串運算符
- 數組運算符
- 類型運算符
- 流程控制
- continue
- switch
- declare
- return
- require
- include
- require_once