PHP中超全域變數$GLOBALS和global的區別_PHP教程

來源:互聯網
上載者:User
本篇文章分享一下關於PHP中的超全域變數$GLOBALS和global的區別。

一、超全域變數$GLOBALS
 
PHP超全域變數有很多,如下的都屬於超全域變數(Superglobal):
 
$GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。
 
官方說明:

$GLOBALS — 引用全域範圍中可用的全部變數。

一個包含了全部變數的全域群組合數組。變數的名字就是數組的鍵。

即出現過的全域變數,就可以通過$GLOBALS這個數組取得。

PHP生命週期中,定義在函數體外部的所謂全域變數,函數內部是不能直接獲得的。

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

如上的例子,要訪問外部的$foo必須使用 $GLOBALS 數組。對於通過include檔案進來的外部全域變數也適用。
 
php中global也有這樣的功能,它和$GLOBALS的區別在於:

global在函數產生一個指向函數外部變數的別名變數,而不是真正的函數外部變數。

$GLOBALS[]確確實實調用是外部的變數,函數內外會始終保持一致。
 
對於類中的成員變數,類中函數必須使用$this->的方式訪問,不能用$GLOBALS方式:
 
global的作用是定義全域變數,但是這個全域變數不是應用於整個網站,而是應用於當前頁面,包括include或require的所有檔案。

二、執行個體講解

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";

執行結果為:

0
5

為什麼不是2個5而是1個0和1個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";

執行結果只輸入一個2;

1、$GLOBALS是由所有已定義全域變數自動形成的數組。變數名就是該數組的索引。即$GLOBALS['var1']與函數外部的變數$var1是同一個變數,所以將$GLOBALS['var1'] 刪除後,該變數已不存在,所有無法輸出了。

註:$GLOBALS是自動全域變數。這意味著它在所有的指令碼中都有效。在函數或方法中不需要使用 global $GLOBALS;來訪問它。

2、"global $var1;"是產生了函數外部$var1的別名變數"$var1",它不是真正的函數外部變數,他只存在於函數的內部,所以即使在函數內將別名變數刪除也不會影響外面的變數,但是可以修改函數外部變數的值。

或許有的人總想知道這個或那個的區別:

在php程式,包括其他程式的學習中,自己動手實驗,根據結果加上的思考,有的時候比上網尋找可能會來得更快一些,更準確一些。下面我們來講一下,php在全域範圍內訪問變數要怎麼辦?

例一:global定義全域變數。

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

先不給出結果,自己運行一下程式。函數內部的變數可以訪問到了。從結果可以看出,unset只是斷開變數名與變數值串連,並沒有馬上銷毀變數的值,而且在函數內部定義的全域變數,實際在外部只是使用了函數內部的別名而已,所以我們在外面依然可以訪問$var1。

例二:$GLOBALS在函數內部訪問函數外面定義的變數。

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

直接在函數內部使用$waibu是會出錯的。

您可能感興趣的文章

  • php中在變數和函數前加static關鍵字之後的區別
  • php $GLOBALS超全域變數分析
  • PHP中跳出多重迴圈使用break,continue,goto,return,exit的用法和區別
  • PHP中return 和 exit 、break和contiue 區別與用法
  • php中echo,print,print_r,var_export,var_dump 的用法與區別
  • php Output Control 深入理解 ob_flush 和 flush 的區別
  • php中empty,is_null,isset的區別詳解
  • smarty模板中使用php函數以及smarty模板中如何對一個變數使用多個函數

http://www.bkjia.com/PHPjc/813354.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/813354.htmlTechArticle本篇文章分享一下關於PHP中的超全域變數$GLOBALS和global的區別。 一、超全域變數$GLOBALS PHP超全域變數有很多,如下的都屬於超全域變數(Su...

  • 聯繫我們

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

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

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.