PHP:變數範圍

PHP 中的變數有著單一的存取範圍,也就是它定義時所在的範圍;如果在函數外定義,則為全域變數 (global variables),整個 PHP 頁面的地方都可以使用到此變數,包含被 required 及 included 的檔案中也行;但若是定義在函式中的,則稱本地變數 (local variables),在該函式之外的地方即無法使用。

但與 C-like 語言不同的地方是,若你在函數外定義了某個變數,在函數內沒有先定義而直接使用了一個同樣名稱的變數時,PHP 會將函數內的那個視為新定義的變數,而不是沿用那個同名的全域變數;除非你以 global 關鍵字或 $GLOBALS 陣列來指定你的確要在函數中使用全域變數:

<?php
$a = 1;
$b = 2;

function test(){
  // 指向一個新定義的本地變數,因尚未指定初值,所以不會印出東西
  echo $a;
}

function Sum1(){
  //使用 global 關鍵字說明這兩個變數是指向全域變數的
  global $a, $b;

  $b = $a + $b;
}

function Sum2(){
  //使用 $GLOBALS 陣列指定全域變數
  $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
?>


PHP 中的靜態 (static) 變數只能在函式中使用;靜態變數的值在程式離開函式後還會繼續保留,而且如果試圖以運算式的結果來初始化靜態變數時會產生錯誤。


<?php
function foo(){
  static $int = 0; // correct
  static $int = 1+2; // wrong (as it is an expression)
  static $int = sqrt(121); // wrong (as it is an expression too)

  //$int 的值在每次 foo() 被呼叫時都會加 1
  $int++;
  echo $int;
}
?>

留言

這個網誌中的熱門文章

PHP:callback函數的使用

PHP常用函數:陣列(array)