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