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

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
解釋負載平衡如何影響會話管理以及如何解決。解釋負載平衡如何影響會話管理以及如何解決。Apr 29, 2025 am 12:42 AM

負載均衡會影響會話管理,但可以通過會話複製、會話粘性和集中式會話存儲解決。 1.會話複製在服務器間複製會話數據。 2.會話粘性將用戶請求定向到同一服務器。 3.集中式會話存儲使用獨立服務器如Redis存儲會話數據,確保數據共享。

說明會話鎖定的概念。說明會話鎖定的概念。Apr 29, 2025 am 12:39 AM

Sessionlockingisatechniqueusedtoensureauser'ssessionremainsexclusivetooneuseratatime.Itiscrucialforpreventingdatacorruptionandsecuritybreachesinmulti-userapplications.Sessionlockingisimplementedusingserver-sidelockingmechanisms,suchasReentrantLockinJ

有其他PHP會議的選擇嗎?有其他PHP會議的選擇嗎?Apr 29, 2025 am 12:36 AM

PHP會話的替代方案包括Cookies、Token-basedAuthentication、Database-basedSessions和Redis/Memcached。 1.Cookies通過在客戶端存儲數據來管理會話,簡單但安全性低。 2.Token-basedAuthentication使用令牌驗證用戶,安全性高但需額外邏輯。 3.Database-basedSessions將數據存儲在數據庫中,擴展性好但可能影響性能。 4.Redis/Memcached使用分佈式緩存提高性能和擴展性,但需額外配

在PHP的上下文中定義'會話劫持”一詞。在PHP的上下文中定義'會話劫持”一詞。Apr 29, 2025 am 12:33 AM

Sessionhijacking是指攻擊者通過獲取用戶的sessionID來冒充用戶。防範方法包括:1)使用HTTPS加密通信;2)驗證sessionID的來源;3)使用安全的sessionID生成算法;4)定期更新sessionID。

PHP的完整形式是什麼?PHP的完整形式是什麼?Apr 28, 2025 pm 04:58 PM

文章討論了PHP,詳細介紹了其完整形式,在We​​b開發中的主要用途,與Python和Java的比較以及對初學者的學習便利性。

PHP如何處理形式數據?PHP如何處理形式數據?Apr 28, 2025 pm 04:57 PM

PHP使用$ \ _ post和$ \ _獲取超級全局的php處理數據,並通過驗證,消毒和安全數據庫交互確保安全性。

PHP和ASP.NET有什麼區別?PHP和ASP.NET有什麼區別?Apr 28, 2025 pm 04:56 PM

本文比較了PHP和ASP.NET,重點是它們對大規模Web應用程序,性能差異和安全功能的適用性。兩者對於大型項目都是可行的,但是PHP是開源和無關的,而ASP.NET,

PHP是對病例敏感的語言嗎?PHP是對病例敏感的語言嗎?Apr 28, 2025 pm 04:55 PM

PHP的情況敏感性各不相同:功能不敏感,而變量和類是敏感的。最佳實踐包括一致的命名和使用對案例不敏感的功能進行比較。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器