主頁(yè) > 知識(shí)庫(kù) > PHP中$GLOBALS與global的區(qū)別詳解

PHP中$GLOBALS與global的區(qū)別詳解

熱門標(biāo)簽:臨沂智能電銷機(jī)器人軟件 地圖標(biāo)注風(fēng)向標(biāo) 電梯外呼線路板維修視頻 十堰ai電話機(jī)器人效果怎么樣 安陽(yáng)自動(dòng)外呼系統(tǒng)價(jià)格是多少 芒果電銷機(jī)器人 上海公司外呼系統(tǒng)線路 浙江外呼電話系統(tǒng)軟件 銀川ai電話機(jī)器人

PHP中$GLOBALS和global都可以實(shí)現(xiàn)全局變量的功能,所以很多人都認(rèn)為global和$GLOBALS[]只是寫法上面的差別,其實(shí)不然。$GLOBALS 是一個(gè)超級(jí)全局變量,其實(shí)是一個(gè)數(shù)組,而global 則是一個(gè)聲明全局變量的關(guān)鍵字!

一、超全局變量$GLOBALS

PHP超全局變量有很多,如下的都屬于超全局變量(Superglobal):

$GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。

官方說(shuō)明:

$GLOBALS — 引用全局作用域中可用的全部變量。

一個(gè)包含了全部變量的全局組合數(shù)組。變量的名字就是數(shù)組的鍵。

即出現(xiàn)過(guò)的全局變量,就可以通過(guò)$GLOBALS這個(gè)數(shù)組取得。

  • $GLOBALS['var'] 是外部的全局變量$var本身。
  • global $var 是外部$var的同名引用或者指針。(錯(cuò)誤:是個(gè)別名引用而已,非指針!?。。?/li>

PHP生命周期中,定義在函數(shù)體外部的所謂全局變量,函數(shù)內(nèi)部是不能直接獲得的。

$foo="Example content";
test();
function test(){
  $foo="local variable";
  echo '$foo in current scope: '.$foo."br>";
  echo '$foo in global scope: '.$GLOBALS["foo"]."br>";
}

如上的例子,要訪問(wèn)外部的$foo必須使用 $GLOBALS 數(shù)組。對(duì)于通過(guò)include文件進(jìn)來(lái)的外部全局變量也適用。

php中g(shù)lobal也有這樣的功能,它和$GLOBALS的區(qū)別在于:

global在函數(shù)產(chǎn)生一個(gè)指向函數(shù)外部變量的別名變量,而不是真正的函數(shù)外部變量。

$GLOBALS[]確確實(shí)實(shí)調(diào)用是外部的變量,函數(shù)內(nèi)外會(huì)始終保持一致。

對(duì)于類中的成員變量,類中函數(shù)必須使用$this->的方式訪問(wèn),不能用$GLOBALS方式:

global的作用是定義全局變量,但是這個(gè)全局變量不是應(yīng)用于整個(gè)網(wǎng)站,而是應(yīng)用于當(dāng)前頁(yè)面,包括include或require的所有文件。

二、實(shí)例講解

function t1(){
  global $var1,$var2;
  $var2=$var1;
}
function t2(){
  $GLOBALS['var3']=$GLOBALS['var1'];
}
$var1=5;
$var2=$var3=0;
t1();
print $var2."\n";
t2();
print $var3."\n";

執(zhí)行結(jié)果為:

0
5

為什么不是2個(gè)5而是1個(gè)0和1個(gè)5呢?再修改一下例子:

function t1(){
  global $var1;
  $var1=2;
  unset($var1);
}
function t2(){
  $GLOBALS['var1']=3;
  unset($GLOBALS['var1']);
}
$var1=1;
t1();
print $var1."\n";
t2();
print $var1."\n";

執(zhí)行結(jié)果只輸入一個(gè)2;

1、$GLOBALS是由所有已定義全局變量自動(dòng)形成的數(shù)組。變量名就是該數(shù)組的索引。即$GLOBALS['var1']與函數(shù)外部的變量$var1是同一個(gè)變量,所以將$GLOBALS['var1'] 刪除后,該變量已不存在,所有無(wú)法輸出了。

注:$GLOBALS是自動(dòng)全局變量。這意味著它在所有的腳本中都有效。在函數(shù)或方法中不需要使用 global $GLOBALS;來(lái)訪問(wèn)它。

2、"global $var1;"是產(chǎn)生了函數(shù)外部$var1的別名變量"$var1",它不是真正的函數(shù)外部變量,他只存在于函數(shù)的內(nèi)部,所以即使在函數(shù)內(nèi)將別名變量刪除也不會(huì)影響外面的變量,但是可以修改函數(shù)外部變量的值。

或許有的人總想知道這個(gè)或那個(gè)的區(qū)別:

在php程序,包括其他程序的學(xué)習(xí)中,自己動(dòng)手實(shí)驗(yàn),根據(jù)結(jié)果加上的思考,有的時(shí)候比上網(wǎng)查找可能會(huì)來(lái)得更快一些,更準(zhǔn)確一些。下面我們來(lái)講一下,php在全局范圍內(nèi)訪問(wèn)變量要怎么辦?

例一:global定義全局變量。

function test_global(){
  global $var1;
  $var1='ok';
  unset($var1);
}
test_global();
$var2=$var1;
unset($var1);
echo $var2;

先不給出結(jié)果,自己運(yùn)行一下程序。函數(shù)內(nèi)部的變量可以訪問(wèn)到了。從結(jié)果可以看出,unset只是斷開(kāi)變量名與變量值連接,并沒(méi)有馬上銷毀變量的值,而且在函數(shù)內(nèi)部定義的全局變量,實(shí)際在外部只是使用了函數(shù)內(nèi)部的別名而已,所以我們?cè)谕饷嬉廊豢梢栽L問(wèn)$var1。

例二:$GLOBALS在函數(shù)內(nèi)部訪問(wèn)函數(shù)外面定義的變量。

$codetc='out';
function ff(){
  echo $GLOBALS['codetc'];
}
ff();

直接在函數(shù)內(nèi)部使用$codetc是會(huì)出錯(cuò)的。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

您可能感興趣的文章:
  • 如何在PHP環(huán)境中使用ProtoBuf數(shù)據(jù)格式
  • PHP const定義常量及global定義全局常量實(shí)例解析
  • PHP變量作用域(全局變量&局部變量)&global&static關(guān)鍵字用法實(shí)例分析
  • PHP global全局變量經(jīng)典應(yīng)用與注意事項(xiàng)分析【附$GLOBALS用法對(duì)比】
  • php利用ob_start()清除輸出和選擇性輸出的方法
  • PHP操作MySQL中BLOB字段的方法示例【存儲(chǔ)文本與圖片】
  • PHP編程文件處理類SplFileObject和SplFileInfo用法實(shí)例分析
  • PHP ob緩存以及ob函數(shù)原理實(shí)例解析

標(biāo)簽:韶關(guān) 甘肅 梅河口 九江 昭通 遼陽(yáng) 十堰 涼山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP中$GLOBALS與global的區(qū)別詳解》,本文關(guān)鍵詞  PHP,中,GLOBALS,與,global,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP中$GLOBALS與global的區(qū)別詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PHP中$GLOBALS與global的區(qū)別詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章