天天看點

php9個超全局變量的用法詳解(一)

PHP 中的許多預定義變量都是“超全局的”,這意味着它們在一個腳本的全部作用域中都可用。在函數或方法中無需執行global $variable;就可以通路它們。

這些超全局變量是:

  • $GLOBALS
  • $_SERVER
  • $_GET
  • $_POST
  • $_FILES
  • $_COOKIE
  • $_SESSION
  • $_REQUEST
  • $_ENV

1.先看一下$GLOBALS,它是包含了全部變量的全局組合數組,什麼意思呢,看一個c語言程式

int main()
{
      int a = 3;
      void t()
     {
     printf("%d",a);
     }
     t();
     return 0;
}
           

這個程式運作出來肯定是輸出a,很容易了解的嗎,在t()函數裡将a變量輸出 。但看一下php的一個程式:

<?php

$a = 3;
function t(){
echo $a;
}
t();
?>
           

這個會輸出的是3嗎?no,no,no那就太天真了,它是什麼都輸出不來的,why???很簡單,因為$a不是全局變量,t()函數裡面區不到它的值,哇~世界黑暗了,怎麼辦??别緊張啦,這個時候就需要我們的$GLOBALS出場了,剛才我說的它是包含了全部變量的全局組合數組可能大家沒聽懂,現在說就應該清楚多了,也就是說通過$GLOBALS就可以在t()函數裡取到$a的值,方法$GLOBAL['$A'],試一下将t()函數内容改成function t(){

echo $GLOBALS['a'];

}運作一下,頁面上就會清晰的顯示出$a的值啦。再說一下$GLOBAL的範圍,在你目前頁面和目前頁面require和include 進來的頁面裡的值它都可以取到。還算厲害吧。當然了,也不是萬能的,再看一下這個

<?php
$a = 5;
function t(){
$b = 2;
}
function w()
{
echo $GLOBALS['b'];
echo $GLOBALS['a'];
}
t();
w();
?>
           

輸出什麼呢???答案是隻有5,也就是說$GLOBALS是不能取到其它函數裡面的值的。

再看第二個$_SERVER,$_SERVER是一個包含了諸如頭資訊(header)、路徑(path)、以及腳本位置(script locations)等等資訊的數組。這個數組中的項目由 Web 伺服器建立。不能保證每個伺服器都提供全部項目;伺服器可能會忽略一些,或者提供一些沒有在這裡列舉出來的項目。從$_SERVER裡面可以提取很多有用的資訊,比如$_SERVER['REMOTE_ADDR']可以得到目前使用者的ip,下面我用foreach周遊整個$_SERVER數組,将其列印。代碼如下:

<?php
foreach($_SERVER as $key => $value){
echo "<b>$key:</b> $value<br>\n";
}
           

想要看效果又不想或者現在不能寫的可以看這個網址,這是sae伺服器server的效果。http://5253.sinaapp.com/blog/server.php我将它上傳到這裡了。