首頁 >後端開發 >php教程 >php變數作用域的用法總結

php變數作用域的用法總結

WBOY
WBOY原創
2016-07-25 08:59:111251瀏覽
static $a = 0; echo $a;
  1. function function_name() {
  2. global $var;
  3. }
  4. $var=20;
  5. ftion; ); // Function call.
  6. ?>
複製程式碼

在這個範例中,函數內部的$var 現在與函數外部的$var 相同。這表示變數 $var 已經有一個值20,如果在函數內部改變了這個值,外部的 $var 值也會改變。 避開變數作用域的另一個方法是利用超全域變數:$_GET、$_POST、$_REQUEST 等。這些變數在你的函數內是自動可存取的(因此,它們是超全域變數)。也可以將元素添加到 $GLOBALS 陣列中,使得可以在函數內使用它們。

最好不要在函數內使用全域變數。在設計函數時,應該使它們根據需要接受每個值作為參數,並根據需要傳回任何值。依靠函數內的全域變數將使得它們更依賴上下文,因而不太有用。

在PHP中變數主要有:內建超級全域變量,一般的變量,常數,全域變量,靜態變數等.

內建超級全域變數可以在腳本的任何地方使用和可見。即如果我們在一個PHP頁面中改變了其中的一個值,那麼在其他PHP頁面中使用時,它的值也會改變。

常數一旦被宣告將可以在全域可見,也就是說,它們可以函數內外使用,但是這僅限於一個頁面之中(包含我們透過include和include_once)包含進來的PHP腳本,但是在其他的頁面中就不能使用了。

在一個腳本中宣告的全域變數在整個腳本中是可見的,但不是在函數內部,在函數內部的變數如果與全域變數名稱相同,以函數內部的變數為準。

函數內部使用的變數宣告為全域變數時,其名稱要與全域變數的名稱一致,在這樣的情況下,我們就可以在函數中使用函數外部的全域變數了,這樣就可以避免上一種因為函數內部的變數與外部的全域變數名稱相同而覆蓋了外部變數這樣的情況。

在函數內部建立並宣告為靜態的變數無法在函數外部可見,但是可以在函數的多次執行過程中保持該值,最常見的情況就是在函數的遞歸執行的過程之中。

在函數內部建立的變數對函數來說是本地的,而當函數終止時,變數也就不存在了。

超級全域變數的完整列表如下:

  1. $a = 4;
  2. function sendValue($x)
  3. {
  4. echo $x
  5. }
  6. sendValue($a);
  7. ?>
複製程式碼

解說: $a定義在函數外,函數定義了參數,當函數被呼叫時,$a將以參數的形式被傳遞。因此上面程式碼能夠正常運作。

  1. $a = 4;
  2. function sendValue()
  3. {
  4. echo $a;
  5. }
  6. sendValue();
  7. ?>
複製程式碼

解說:當函數被呼叫時,$a不能以參數的形式被傳遞。所以上面程式碼不能夠正常運作。 變數範圍 變數的範圍即它定義的上下文背景(譯者:說穿了,也就是它的生效範圍)。大部分的 PHP 變數只有一個單獨的範圍。這個單獨的範圍跨度同樣包含了 include 和 require 所引入的檔案。範例:

  1. $a = 1;
  2. include "b.inc";
  3. ?>
複製程式碼

這裡變數$a 將會在包含檔案b.inc 中生效。但是,在使用者自訂函數中,一個局部函數範圍將被引入。任何用於函數內部的變數按缺省情況將被限制在局部函數範圍內。範例:
  1. $a = 1; /* global scope */

  2. function Test()

  3. {
  4. echo $a; /* reference to local scope variable */
  5. }
  6. Test();

  7. ?>
  8. ? >
複製程式碼

這個腳本不會有任何輸出,因為 echo 語句引用了一個局部版本的變數 $a,而且在這個範圍內,它並沒有被賦值。你可能注意到 PHP 的全域變數和 C 語言有一點點不同,在 C 語言中,全域變數在函數中自動生效,除非被局部變數覆寫。這可能引起一些問題,有些人可能漫不經心的改變一個全域變數。 PHP 中全域變數在函數中使用時必須申明為全域。

The global keyword 首先,一個使用 global 的範例:

範例 12-1. 使用 global

  1. $a = 1;

  2. $b = 2;
  3. function Sum()

  4. {
  5. global $a, $b;
  6. $b = $a + $b;

  7. }
  8. Sum();

  9. echo $b;
  10. ?>
複製程式碼

複製程式碼

以上腳本的輸出將是"3"。在函數中申明了全域變數 $a 和 $b,任何變數的所有引用變數都會指向到全域變數。對於函數能夠申明的全域變數的最大個數,PHP 沒有限制。

在全域範圍內存取變數的第二個方法,是用特殊的 PHP 自訂 $GLOBALS 陣列。前面的例子可以寫成:
    例 12-2. 使用 $GLOBALS 取代 global
  1. $a = 1;

  2. $b = 2;
  3. function Sum()

  4. {
  5. $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
  6. }
  7. Sum();
echo $b;
?>

複製程式碼

在$ GLOBALS 陣列中,每一個變數為一個元素,鍵名對應變數名,值變數的內容。 $GLOBALS 之所以在全域範圍內存在,是因為 $GLOBALS 是一個超全域變數。以下範例顯示了超全域​​變數的用處:
    範例 12-3. 示範超全域變數和作用域的例子
  1. function test_global()

  2. {
  3. // 大多數的預定義變數並不"super",它們需要用'global' 關鍵字來使它們在函數的本地區域中有效。
  4. global $HTTP_POST_VARS;
  5. print $HTTP_POST_VARS['name'];

  6. // Superglobals 在任何範圍內都有效,它們不需要'global' 聲明。 Superglobals 是在 PHP 4.1.0 引入的。

  7. print $_POST['name'];
}
?>

複製程式碼

複製程式碼
  1. 複製程式碼
  2. 使用靜態變數 變數範圍的另一個重要特性是靜態變數(static variable)。靜態變數僅在局部函數域中存在,但當程式執行離開此作用域時,其值並不會遺失。看看下面的範例:
  3. 範例 12-4. 示範需要靜態變數的例子
function Test (){

$a = 0;

echo $a
;
$a++;
    }
  1. ?>
  2. 複製程式碼
  3. 本函數沒什麼用處,因為每次都叫出$a 的值設為0 並輸出"0"。將變數加一的 $a++ 沒有作用,因為一旦退出本函數則變數 $a 就不存在了。要寫一個不會遺失本次計數值的計數函數,要將變數 $a 定義為靜態的:
  4. 範例 12-5. 使用靜態變數的例子

function Test(){

$a++;}
?>

複製程式碼
現在,每次呼叫Test() 函數都會輸出$a 的函數值並加一。 1 2 下一頁 尾頁
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn