php $GLOBALS超全局變量分析
php中有一個不為很多人所用的超全局變量$GLOBALS。合理使用這個變量能使工作變得更加有效率,本篇文章主要分析一下這個超全局變量的用法以及$GLOBALS和global的區(qū)別。
$GLOBALS定義:引用全局作用域中可用的全部變量(一個包含了全部變量的全局組合數(shù)組。變量的名字就是數(shù)組的鍵),與所有其他超全局變量不同,$GLOBALS在PHP代碼中任何地方總是可用的,自己可以通過打印$GLOBALS這個變量的結(jié)果就知道了。
在PHP生命周期中,定義在函數(shù)體外部的所謂全局變量,函數(shù)內(nèi)部是不能直接獲得的。如果要在函數(shù)體內(nèi)訪問外部定義的全局變量,可以通過global聲明或者直接使用$GLOBALS來進行訪問,例如:
<?php $var1='www.Alixixi.com'; $var2='www.google.cn'; test(); function test(){ $var1='taobao'; echo $var1,'<br />'; global $var1; echo $var1,'<br />'; echo $GLOBALS['var2']; }
結(jié)果將打印為:
taobao
www.Alixixi.com
www.google.cn
下面主要說明一下global和$GLOBALS的區(qū)別:
$GLOBALS['var']是外部的全局變量本身,而global $var是外部$var的同名引用或者指針,也就是說global在函數(shù)產(chǎn)生一個指向函數(shù)外部變量的別名變量,而不是真正的函數(shù)外部變量,而$GLOBALS[]確確實實調(diào)用的是外部的變量,函數(shù)內(nèi)外會始終保持一致。下面通過例子說明一下:
$var1=1; $var2=2; function test(){ $GLOBALS['var2']=&$GLOBALS['var1']; } test(); echo $var2;
打印結(jié)果為1
$var1=1; $var2=2; function test(){ global $var1,$var2; $var2=&$var1; } test(); echo $var2;
打印結(jié)果為2。為什么會打印結(jié)果為2呢?其實就是因為$var1的引用指向了$var2的引用地址。導(dǎo)致實質(zhì)的值沒有改變。我們再來看一個例子吧。
$var1=1; function test(){ unset($GLOBALS['var1']); } test(); echo $var1;
因為$var1被刪除了,所以什么東西都沒有打印。
$var1=1; function test(){ global $var1; unset($var1); } test(); echo $var1;
打印結(jié)果為1。證明刪除的只是別名引用,起本身的值沒有受到任何的改變。也就是說global $var其實就是$var=&$GLOBALS['var']。調(diào)用外部變量的一個別名而已。
關(guān)鍵字:全局、變量、PHP
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動項
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機IP講解
- CentOS7使用hostapd實現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯
- 解決Centos7雙系統(tǒng)后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解