變量與作用域
php的變量分爲三類:局部變量,全局變量,靜態變量
同樣php的作用域分爲三類:1、local(局部作用域) 2、global(全局作用域) 3、static(靜態作用域)
local和global作用域
通常情況local和global作用域是容易混淆的,如何區分這兩種作用域呢?規則如下:
1、函數外部聲明的變量擁有全局作用域,只能在函數外部訪問。
2、函數內部聲明的變量擁有局部作用域,只能在函數內部訪問。
PHP生命週期中,定義在函數體外部的所謂全局變量,函數內部是不能直接獲得的。
對於類中的成員變量,類中函數必須使用$this->的方式訪問。
?php
$var = '1'; //全局變量
function foo(){
$var = '2';//局部變量,只是名字恰好與var相同
}
foo();
echo $var;
?>
很明顯打印的結果是:1
global關鍵字
我們經常會遇到一種情況,在函數外部聲明瞭一個全局變量後,我們想在函數內部訪問或者修改這一全局變量,這裏我們就需要使用一個叫global的關鍵字來實現。
global作用:在函數內創建一個局部變量,使用global關鍵字使其成爲全局變量的同名引用。
我們需要藉助global關鍵字來實現,
<?php
$var = '1';//全局變量
function foo(){
global $var;//在函數內創建一個局部變量,使用global關鍵字使其成爲全局變量的同名引用
$var = '2';
}
foo();
echo $var;
?>
打印的結果是:2
超全局變量$GLOBALS
在生成全局變量的時候,PHP 同時在名爲 $GLOBALS的數組中存儲了所有的全局變量。
第一段
<?php
$var = '1';//全局變量,即$GLOBALS['var'] = '1'
function foo(){
global $var; //**全局變量的引用,即 $var = &$GLOBALS['var']**
$var = '2';
unset($var);
}
foo();
echo $var;
?>
打印結果是:2
我們知道global是生成一個全局變量的別名引用(類似於桌面上一個文件跟它的快捷方式)。引用的值修改後,全局變量的值也就修改了,在第一段代碼中,修改了快捷方式的內容,原文件的內容也得到了修改,然後又刪除了快捷方式(unset($var)😉,所以結果是修改後的值。
第二段
<?php
$var = '1';//全局變量,即$GLOBALS['var'] = '1'
function foo(){
global $var; //全局變量的引用,即 $var = &$GLOBALS['var']
unset($var);
$var = '2';
}
foo();
echo $var;
?>
打印結果是:1
第二段代碼中,在var);方法銷燬了引用變量,所以導致全局的變量值並未修改。
再看一段代碼
第三段
<?php
$var = '1';//全局變量,即$GLOBALS['var'] = '1'
function foo(){
global $var; //全局變量的引用,即 $var = &$GLOBALS['var']
unset($GLOBALS['var']);
$var = '2';
//或者在此調用unset($GLOBALS['var']);
}
foo();
echo $var;
?>
打印結果都是空
因爲全局變量銷燬了,引用也銷燬了(原文件沒了,快捷方式也沒了)