PHP:變數範圍
PHP 中的變數有著單一的存取範圍,也就是它定義時所在的範圍;如果在函數外定義,則為全域變數 (global variables),整個 PHP 頁面的地方都可以使用到此變數,包含被 required 及 included 的檔案中也行;但若是定義在函式中的,則稱本地變數 (local variables),在該函式之外的地方即無法使用。
但與 C-like 語言不同的地方是,若你在函數外定義了某個變數,在函數內沒有先定義而直接使用了一個同樣名稱的變數時,PHP 會將函數內的那個視為新定義的變數,而不是沿用那個同名的全域變數;除非你以 global 關鍵字或 $GLOBALS 陣列來指定你的確要在函數中使用全域變數:
PHP 中的靜態 (static) 變數只能在函式中使用;靜態變數的值在程式離開函式後還會繼續保留,而且如果試圖以運算式的結果來初始化靜態變數時會產生錯誤。
但與 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;
}
?>
留言