執行如下代碼,
$i = 10;
function my(){
echo $i;
}
my();
xdebug顯示是:Undefined variable
以前也知道有這個問題存在,即函數內部不可以訪問外部的變量,如果想訪問,如上,則在函數內部加 global $i
今天看到http://phpbook.sinaapp.com/ch2.4.html,才知道原來是這么回事:
用戶在php中定義的變量都可以在一個HashTable中找到,當php中定義一個變量,內核會自動的把它的信息存儲到一個用HashTable實現的符號表里
當用戶在php中調用一個函數或者類的方法時,內核會創建一個新的符號表並激活之,這也是為什么我們無法在函數中使用函數外定義的變量的原因(因為他們分屬兩個符號表,一個當前作用域,一個全局作用域的),如果不是在一個函數里,則全局作用域的符號表處於激活狀態。