當前位置:學者齋 >

計算機 >php語言 >

php變數作用域的深入解析

php變數作用域的深入解析

文章是對php變數作用域進行了詳細的分析介紹,需要的朋友參考下,跟隨小編去瞧一瞧!

php變數作用域的深入解析

PHP 中的每個變數都有一個針對它的作用域,它是指可以在其中訪問變數(從而訪問它的值)的一個領域。對於初學者來說,變數的作用域是它們所駐留的頁面。因此,如果你定義了 $var,頁面餘下部分就可以訪問 $var,但是,其它頁面一般不能訪問它(除非使用特殊的變數)。

因為包含檔案像它們是原始(包含)指令碼的一部分那樣工作,所以在 include() 那一行之前定義的變數可供包含檔案使用。此外,包含檔案內定義的變數可供 include() 那一行之後的父(包含)指令碼使用。

當使用你自己定義的函式時,所有這些都將變得不那麼明顯。這些函式具有它們自己的作用域,這意味著在一個函式內使用的變數不能在其外部使用,在一個函式外部定義的變數不能在其內部使用。由於這個原因,函式內部的變數可以具有與其外部的變數相同的名稱,但是它們仍然是完全不同的變數,並且具有不同的值。對於大多數初級程式設計師來說,這是一個使人糊塗的概念。

要改變一個函式內的變數的作用域,可以使用 globAL 語句。

複製程式碼 程式碼如下:

Code highlighting produced by Actipro CodeHighlighter (freeware)><?php

function function_name() {

global $var;

}

$var=20;

function_name(); // Function call.

?>

在這個示例中,函式內部的 $var 現在與函式外部的 $var 相同。這意味著變數 $var 已經具有一個值20,如果在函式內部改變了這個值,外部的 $var 值也會改變。

避開變數作用域的另一個方法是利用超全域性變數:$_GET、$_POST、$_REQUEST 等。這些變數在你的函式內是自動可訪問的(因此,它們是超全域性變數)。也可以新增元素到 $GLOBALS 陣列中,使得可以在函式內使用它們。

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

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

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

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

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

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

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

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

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

?.$GOBALS 所有全域性變數陣列

?.$_SERVER 伺服器環境變數陣列

?.$_POST 通過POST方法傳遞給該指令碼的變數陣列

?.$_GET 通過GET方法傳遞給該指令碼的變數陣列

?.$_COOKIE cookie變數陣列

?.$_FILES 與檔案上傳相關的變數陣列

?.$_ENV 環境變數陣列

?.$_REQUEST 所有使用者輸入的變數陣列包括$_GET $_POST $_COOKIE 所包含的輸入內容

?.$_SESSION 會話變數陣列

例項講解:

複製程式碼 程式碼如下:

Code highlighting produced by Actipro CodeHighlighter (freeware)><?php

$a = 4;

function sendValue($x)

{

echo $x;

}

sendValue($a);

?>

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

複製程式碼 程式碼如下:

Code highlighting produced by Actipro CodeHighlighter (freeware)><?php

$a = 4;

function sendValue()

{

echo $a;

}

sendValue();

?>

講解:當函式被呼叫時,$a不能以引數的形式被傳遞。所以上面程式碼不能夠正常執行。

變數範圍

變數的範圍即它定義的上下文背景(譯者:說白了,也就是它的生效範圍)。大部分的 PHP 變數只有一個單獨的範圍。這個單獨的範圍跨度同樣包含了 include 和 require 引入的檔案。範例:

複製程式碼 程式碼如下:

<?php

  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/jsj/php/qr3ekr.html