php $GLOBALS超全域變數分析

來源:互聯網
上載者:User

   php中有一個不為很多人所用的超全域變數$GLOBALS。合理使用這個變數能使工作變得更加有效率,本篇文章主要分析一下這個超全域變數的用法以及$GLOBALS和global的區別。

  $GLOBALS定義:引用全域範圍中可用的全部變數(一個包含了全部變數的全域群組合數組。變數的名字就是數組的鍵),與所有其他超全域變數不同,$GLOBALS在PHP代碼中任何地方總是可用的,自己可以通過列印$GLOBALS這個變數的結果就知道了。

  在PHP生命週期中,定義在函數體外部的所謂全域變數,函數內部是不能直接獲得的。如果要在函數體內訪問外部定義的全域變數,可以通過global聲明或者直接使用$GLOBALS來進行訪問,例如:

  $var1='www.Alixixi.com';

  $var2='www.google.cn';

  test();

  function test(){

  $var1='taobao';

  echo $var1,'

  ';

  global $var1;

  echo $var1,'

  ';

  echo $GLOBALS['var2'];

  }

  結果將列印為:

  taobao

  www.Alixixi.com

  www.google.cn

  下面主要說明一下global和$GLOBALS的區別:

  $GLOBALS['var']是外部的全域變數本身,而global $var是外部$var的同名引用或者指標,也就是說global在函數產生一個指向函數外部變數的別名變數,而不是真正的函數外部變數,而$GLOBALS[]確確實實調用的是外部的變數,函數內外會始終保持一致。下面通過例子說明一下:

  $var1=1;

  $var2=2;

  function test(){

  $GLOBALS['var2']=&$GLOBALS['var1'];

  }

  test();

  echo $var2;

  列印結果為1

  $var1=1;

  $var2=2;

  function test(){

  global $var1,$var2;

  $var2=&$var1;

  }

  test();

  echo $var2;

  列印結果為2。為什麼會列印結果為2呢?其實就是因為$var1的引用指向了$var2的引用地址。導致實質的值沒有改變。我們再來看一個例子吧。

  $var1=1;

  function test(){

  unset($GLOBALS['var1']);

  }

  test();

  echo $var1;

  因為$var1被刪除了,所以什麼東西都沒有列印。

  $var1=1;

  function test(){

  global $var1;

  unset($var1);

  }

  test();

  echo $var1;

  列印結果為1。證明刪除的只是別名引用,起本身的值沒有受到任何的改變。也就是說global $var其實就是$var=&$GLOBALS['var']。調用外部變數的一個別名而已。

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。