PHP開發(fā)基礎(chǔ)教學(xué)超全域變量
概括
之前章節(jié)中提到的全域變數(shù)是不能在函數(shù)內(nèi)部引用,但是超級(jí)全域變數(shù)可以
超級(jí)全域變數(shù)在PHP 4.1.0之後啟用, 是PHP系統(tǒng)中自帶的變量,在一個(gè)腳本的全部作用域中都可用。
一、PHP 超級(jí)全域變數(shù)
#PHP中預(yù)先定義了幾個(gè)超級(jí)全域變數(shù)(superglobals) ,這意味著它們?cè)谝粋€(gè)腳本的全部作用域中都可用。 你不需要特別說明,就可以在函數(shù)及類別中使用。
PHP 超級(jí)全域變數(shù)清單:
- ##?$GLOBALS
- ?$_SERVER
- ?$_REQUEST
- ?$_POST
- #?$_GET
- ?$_FILES
- #?$_ENV
- ?$_COOKIE
- ?$_SESSION
二、PHP $GLOBALS
#$GLOBALS 是PHP的一個(gè)超級(jí)全域變數(shù)組,在一個(gè)PHP腳本的全部作用域中都可以存取。 $GLOBALS 是一個(gè)包含了全部變數(shù)的全域組合陣列。變數(shù)的名字就是數(shù)組的鍵。 以下實(shí)例介紹如何使用超級(jí)全域變數(shù)$GLOBALS程式碼如下<?php //定義兩個(gè)全局變量,函數(shù)內(nèi)部不可以訪問 $x = 75; $y = 25; //定義函數(shù) function addition() { //將全局變量變?yōu)槌?jí)全局變量,這樣在函數(shù)內(nèi)部就可以正常訪問了 $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } //調(diào)用函數(shù) addition(); //輸出函數(shù)內(nèi)部定義的全局變量 echo $z; ?>註:以上實(shí)例中z 是一個(gè)$GLOBALS數(shù)組中的超級(jí)全域變量,該變數(shù)同樣可以在函數(shù)外存取
三、PHP $_SERVER
$_SERVER 是一個(gè)包含了頭資訊(header )、路徑(path)、以及腳本位置(script locations)等等資訊的陣列。這個(gè)數(shù)組中的項(xiàng)目是由 Web 伺服器所建立。不能保證每個(gè)伺服器都提供全部項(xiàng)目;伺服器可能會(huì)忽略一些,或提供一些沒有在這裡列舉出來的項(xiàng)目。 以下實(shí)例中展示如何使用$_SERVER中的元素:實(shí)例程式碼如下:<?php //輸出當(dāng)前腳步的文件名 echo "<h3>輸出當(dāng)前腳步的文件名</h3>"; echo $_SERVER['PHP_SELF']; echo "<hr/>"; //當(dāng)前腳步所在服務(wù)器的主機(jī)名 echo "<h3>當(dāng)前腳步所在服務(wù)器的主機(jī)名</h3>"; echo $_SERVER['SERVER_NAME']; echo "<hr/>"; //當(dāng)前請(qǐng)求頭中 Host echo "<h3>當(dāng)前請(qǐng)求頭中 Host</h3>"; echo $_SERVER['HTTP_HOST']; echo "<hr/>"; //引導(dǎo)用戶代理到當(dāng)前頁的前一頁的地址(如果存在) echo "<h3>引導(dǎo)用戶代理到當(dāng)前頁的前一頁的地址(如果存在)</h3>"; echo $_SERVER['HTTP_REFERER']; echo "<hr/>"; //用來檢查瀏覽頁面的訪問者在用什么操作系統(tǒng) echo "<h3>用來檢查瀏覽頁面的訪問者在用什么操作系統(tǒng)</h3>"; echo $_SERVER['HTTP_USER_AGENT']; echo "<hr/>"; //包含當(dāng)前腳本的路徑 echo "<h3>包含當(dāng)前腳本的路徑</h3>"; echo $_SERVER['SCRIPT_NAME']; ?>更多的?$_SERVER 變數(shù)中的重要元素請(qǐng)見下表:
四、PHP $_GET
PHP $_GET 被廣泛應(yīng)用於收集表單數(shù)據(jù),在HTML form標(biāo)籤的指定該屬性:"method="get"。$_GET 也可以收集URL中發(fā)送的數(shù)據(jù)。假定我們有一個(gè)包含參數(shù)的超鏈接HTML頁面:<html> <body> <!--創(chuàng)建個(gè)連接,連接到12_7.php,并且傳過去兩個(gè)值--> <a href="test.php?subject=PHP&web=php.cn">點(diǎn)擊,利用GET方式傳值</a> </body> </html>當(dāng)使用者點(diǎn)擊連結(jié)"點(diǎn)擊,利用GET方式傳值", 參數(shù)"subject" 和"web" 將發(fā)送至"test.php",你可以在"test.php" 文件中使用$_GET 變數(shù)來取得這些資料。
五、PHP $_POST
$_POST 和$_GET一樣,被應(yīng)用於收集表單數(shù)據(jù),在HTML form標(biāo)籤的指定該屬性:"method="post"。
#以下實(shí)例顯示了一個(gè)輸入字段(input)及提交按鈕(submit)的表單(form )。其他的PHP檔案來處理該數(shù)據(jù),你可以修改該指定的腳本檔案名稱。 #
<html> <body> <!-- 接收12_6.php傳來的值 --> <?php echo "Study " . $_GET['subject'] . " at " . $_GET['web']; ?> </body> </html>
附註:因?yàn)楸敬翁峤皇翘峤坏侥壳绊撁?,所以頁面載入完成後會(huì)顯示變數(shù)fname未定義,提交過去一個(gè)值過去就會(huì)消失
PHP $_REQUEST 用來收集HTML表單提交的數(shù)據(jù),可以收集到POST 和GET兩種提交方式提交過來的數(shù)據(jù)。透過點(diǎn)擊"Submit" 按鈕提交表單資料時(shí), 表單資料將會(huì)傳送至<form>標(biāo)籤中action 屬性中指定的腳本檔案。來處理該數(shù)據(jù),你可以修改該指定的腳本檔名。 註:fname未定義原因和上面$_POST一樣
學(xué)習(xí)心得:
一些超級(jí)全域變數(shù)沒必要全部記住,需要的時(shí)候查手冊(cè)即可
$_GET,$_POST,$_REQUEST三者之間的區(qū)別,在後面的章節(jié)會(huì)詳細(xì)介紹