原文地址:http://wordpress.njustjx.cn/index.php/archives/193
PHP
中的每個變量都有一個針對它的作用域,它是指可以在其中訪問變量(從而訪問它的值)的一個領域。對於初學者來說,變量的作用域是它們所駐留的頁面。因此,
如果你定義了 $var,頁面餘下部分就可以訪問 $var,但是,其它頁面一般不能訪問它(除非使用特殊的變量)。
因爲包含文件像它們是原始(包含)腳本的一部分那樣工作,所以在 include() 那一行之前定義的變量可供包含文件使用。此外,包含文件內定義的變量可供 include() 那一行之後的父(包含)腳本使用。
當使用你自己定義的函數時,所有這些都將變得不那麼明顯。這些函數具有它們自己的作用域,這意味着在一個函數內使用的變量不能在其外部使用,在一個函
數外部定義的變量不能在其內部使用。由於這個原因,函數內部的變量可以具有與其外部的變量相同的名稱,但是它們仍然是完全不同的變量,並且具有不同的值。
對於大多數初級程序員來說,這是一個使人糊塗的概念。
要改變一個函數內的變量的作用域,可以使用 global 語句。function function_name() {
global $var;
}
$var=20;
function_name(); // Function call.
在這個示例中,函數內部的 $var 現在與函數外部的 $var 相同。這意味着變量 $var 已經具有一個值20,如果在函數內部改變了這個值,外部的 $var 值也會改變。
避開變量作用域的另一個方法是利用超全局變量:$_GET、$_POST、$_REQUEST 等。這些變量在你的函數內是自動可訪問的(因此,它們是超全局變量)。也可以添加元素到 $GLOBALS 數組中,使得可以在函數內使用它們。
也就是說,最好不要在函數內使用全局變量。在設計函數時,應該使它們根據需要接受每個值作爲參數,並根據需要返回任何值。依靠函數內的全局變量將使得它們更依賴於上下文,因而不太有用。