變數
- 變數命名規則 :
PHP 是弱型別語言, 變數不用事先指定資料型態, 是在執行時才決定型態的, PHP 解析器會依指定之內容來設定這變數的資料型態. PHP 同時也是動態語言, 變數可以隨時重新指定為另一種資料型態之值. 但唯一的例外是, $this 是一個特別變數, 用來表示 PHP 物件本身, 不可重新指定其值. 注意, 要避免在內部範圍 (例如迴圈或函數內) 使用與外部範圍同樣的名稱, 以免存取錯誤. - 變數必須以 $ 開頭, 後接任何數目的英數字或底線組合, 名稱中不能含有 $, 故 $va$r 為不合法.
- $ 後第一個字元不可以是數字, 必須是英文字母或底線 _, 第二字元以後才可以用數字, 最好只用英數字與底線, 不可用 $, @ 等特殊符號. 故 $var@1 不合法, 但 ${1}, ${"變數"} 是合法變數名稱.
- 變數有分大小寫, 故 $var 與 $Var 乃不同變數.
- 不可以使用 PHP 保留字, 內建變數, 內建函數, 或內建物件名稱當變數名稱.
- 參照指派 (assign by reference) 取得變數之記憶體位址:
所謂參照指派是用參照運算子 & 於變數 $var 前 (即 &$var), 這樣就會取得該變數之儲存位址, 對此變數賦值同時也會改變 $var 之值, 因為它們都指向相同位址. 例如 :
$var1="Peter";
$var2=&$var1; //使用參照運算子 & 取得 $var1 之位址, 並將此位址指派給 $var2 (使得 $var1 與 $var2 指向相同位址)
$var2="John"; //賦值 $var2 ($var1 也會同步被改)
echo $var1; //輸出 "John"
echo $var2; //輸出 "John" - 可變變數 (variable variables) :
PHP 的可變變數可以動態地設定變數名稱, 它是以另外一個變數的值來作為它的變數名稱. 它是在一個字串變數名稱 $var 前面再加一個 $, 即 $$var, 表示以 $var 之值作為其名稱的一個變數, 例如 :
$x="hello";
$$x="world"; //此指令等同於 $hello="world"
echo "$x $$x"; //輸出 hello $hello (雙引號的變數解析功能只能用一次)
echo "$x ${$x}"; //輸出 hello world
echo "$x ${$x}"; //輸出 hello world - 變數的有效範圍 (scope) :
PHP 的變數依其有效範圍可以分成 3 種 :變數種類 說明 範例 區域變數 (local variable) 區域變數是在函式內宣告的變數 (包括函式的參數), 只能在函式內部使用, 在函式外無法存取. 當呼叫函式時, 區域變數會被建立, 函式執行完畢即被釋放, 即區域變數的值不會被保留. function myFunc() {
$a=2; //宣告區域變數
echo "函式內 a=$a";
}
myFunc(); //顯示 "函式內 a=2"
echo "函式外 a=$a"; //顯示 "函式外 a=" (無法存取)全域變數 (global variable) 全域變數是在函式外面宣告的變數, 在整個 PHP 檔案中都可以使用, 但是它不像 Javascript 一樣自動穿透到函式內部, PHP 全域變數有效範圍只限於主程式中, 不會影響到函式內同名的區域變數, 欲在函式內部存取全域變數時必須在變數前面加上 global 關鍵字. 在函式內存取全域變數的第二個方法是使用 PHP 特別定義的陣列 $GLOBAL["全域變數名"] :
$a=2;
function myFunc() {
echo "函式內 a=".$GLOBAL["a"];
}$a=2; //宣告全域變數
function myFunc() {
global $a=3; //宣告 $a 為全域變數
echo "函式內 a=$a";
}
myFunc(); //顯示 "函式內 a=2"
echo "函式外 a=$a"; //顯示 "函式外 a=2"靜態變數 (static variable) 靜態變數只能在函式內用 static 關鍵字宣告, 使宣告於函式內之變數在呼叫結束後, 仍然存在於記憶體, 不會被釋放, 下一次在呼叫此函數時, 會重新被存取到. 只要函式被呼叫一次, 函式內的靜態變數就會一直存在, 但是它與全域變數不同的是, 於函式外部是無法存取得到靜態變數的. 注意, 靜態變數不能與複合運算子同時使用 :
static $msg += 1; //syntax error
應該分開來 :
static $msg;
$msg += 1;function myFunc() {
static $msg; //宣告靜態變數
$msg += 1;
echo $msg;
}
myFunc(); //顯示 1
myFunc(); //顯示 2
echo "函式外 msg=$msg"; //顯示 "函式外 msg=" - 變數的預設值 :
每一種資料型態都有預設值, 整數與浮點數預設值為 0, 字串預設值為空字串, 布林值的預設值為 FALSE, 陣列預設值為空陣列. 例如 : echo "x=$x"; //輸出 x= (變數 $x 之前尚未賦值, 因為用於字串中, 預設值為空字串) echo $y += 10; //輸出 10 (變數 $y 之前尚未賦值, 因為用於算式中, 預設值為 0) - 檢查變數是否為空的函數 : empty($var)
可以使用 empty($var) 函數檢查變數是否為空變數. 空變數有六種 : 空字串 "", 0, 字串 "0", NULL, FALSE, 以及空陣列. 對於空變數 empty 會傳回 TRUE.
沒有留言:
張貼留言