2013年1月23日 星期三

PHP 學習筆記 (一) 變數

最近在整理 PHP 筆記, 免得每天上下班都要帶厚厚的電腦書, 只要記在 Google, 哪裡都能查詢.

變數
  1. 變數命名規則 :
    PHP 是弱型別語言, 變數不用事先指定資料型態, 是在執行時才決定型態的, PHP 解析器會依指定之內容來設定這變數的資料型態. PHP 同時也是動態語言, 變數可以隨時重新指定為另一種資料型態之值. 但唯一的例外是, $this 是一個特別變數, 用來表示 PHP 物件本身, 不可重新指定其值. 注意, 要避免在內部範圍 (例如迴圈或函數內) 使用與外部範圍同樣的名稱, 以免存取錯誤.
    • 變數必須以 $ 開頭, 後接任何數目的英數字或底線組合, 名稱中不能含有 $, 故 $va$r 為不合法.
    • $ 後第一個字元不可以是數字, 必須是英文字母或底線 _, 第二字元以後才可以用數字, 最好只用英數字與底線, 不可用 $, @ 等特殊符號. 故 $var@1 不合法, 但 ${1}, ${"變數"} 是合法變數名稱.
    • 變數有分大小寫, 故 $var 與 $Var 乃不同變數.
    • 不可以使用 PHP 保留字, 內建變數, 內建函數, 或內建物件名稱當變數名稱.
  2. 參照指派 (assign by reference) 取得變數之記憶體位址:
    所謂參照指派是用參照運算子 & 於變數 $var 前 (即 &$var), 這樣就會取得該變數之儲存位址, 對此變數賦值同時也會改變 $var 之值, 因為它們都指向相同位址. 例如 :
    $var1="Peter";
    $var2=&$var1;  //使用參照運算子 & 取得 $var1 之位址, 並將此位址指派給 $var2 (使得 $var1 與 $var2 指向相同位址)
    $var2="John";  //賦值 $var2 ($var1 也會同步被改)
    echo $var1;  //輸出 "John"
    echo $var2;  //輸出 "John"
  3. 可變變數 (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
  4. 變數的有效範圍 (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="
  5. 變數的預設值 :
    每一種資料型態都有預設值, 整數與浮點數預設值為 0, 字串預設值為空字串, 布林值的預設值為 FALSE, 陣列預設值為空陣列. 例如 : echo "x=$x"; //輸出 x= (變數 $x 之前尚未賦值, 因為用於字串中, 預設值為空字串) echo $y += 10; //輸出 10 (變數 $y 之前尚未賦值, 因為用於算式中, 預設值為 0)
  6. 檢查變數是否為空的函數 : empty($var)
    可以使用 empty($var) 函數檢查變數是否為空變數. 空變數有六種 : 空字串 "", 0, 字串 "0", NULL, FALSE, 以及空陣列. 對於空變數 empty 會傳回 TRUE.

沒有留言 :