PHP中超全局變量$GLOBALS和global的區別
php語言2.8W
人之所以能,是相信能。努力總是會有收穫的。下面是小編整理的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面試之php自帶的幾個防止sql注入的函數
畢業季又到了,同學們是不是正為此煩惱呢?以下是本站小編精心為大家整理的PHP面試之php自帶的幾個防止sql注入的函數,希望對大家有所幫助!更多內容請關注應屆畢業生網!SQL注入攻擊是黑客攻擊網站最常用的手段。如果你的站點沒有使用嚴格的用户輸入檢驗,那麼常容易...
-
php遞歸創建和刪除文件夾的代碼
php中遞歸創建和刪除文件夾的代碼,供大家學習參考。就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!方法一複製代碼代碼如下:<?php/***目錄生成類:UtilsMakeDir*@authoryepeng*@since2010.3.18*/classUtilsMakeDir{//基目錄建...
-
PHP入門學習方法
每個人的學習方式不同,寫這篇文章的目的是分享一下自己的學習過程,僅供參考,不要一味的用別人的學習方法,找對自己有用的學習方式,關於php語言怎麼學呢?下面是相關的知識,歡迎閲讀。其實學習一門新語言並不是太難,重要的是你有沒有準備好去學好它,時間的長短和個人的能...
-
PHP 關於訪問控制的和運算符優先級介紹
導語:PHP的知識點相對來説比較多,而且不容易記憶,下面的是本站小編為大家蒐集的.是PHP關於訪問控制的和運算符優先級介紹,希望對你能有所幫助。代碼如下:classFoo{private$name='hdj';publicfunctiongetName(){return$this->name;}}classBarextendsFoo{pub...