在之前的文章中給大家?guī)?lái)了《五分鐘讀懂PHP匿名函數(shù)(實(shí)例詳解)》,這篇文章中詳細(xì)的介紹了PHP中的匿名函數(shù)的相關(guān)知識(shí),本篇文章來(lái)看一看能夠在函數(shù)內(nèi)部引用的超級(jí)全局變量的有關(guān)問(wèn)題,希望對(duì)大家有所幫助!
PHP超級(jí)全局變量
在函數(shù)外部定義的全局變量是不能在函數(shù)內(nèi)部引用的,但是有些時(shí)候卻需要在函數(shù)內(nèi)使用這些全局變量,這時(shí)候就要用到超級(jí)全局變量,超級(jí)全局變量是可以再函數(shù)內(nèi)部引用的。
PHP中預(yù)定義了幾個(gè)超級(jí)全局變量 ,這也就是說(shuō)它們?cè)谝粋€(gè)腳本的全部的作用域中都可以被引用。 不需要特別說(shuō)明,超級(jí)全局變量就可以在函數(shù)及類中使用。
PHP超級(jí)全局變量:
-
$GLOBALS
-
$_SERVER
-
$_REQUEST
-
$_POST
-
$_GET
-
$_FILES
-
$_ENV
-
$_COOKIE
-
$_SESSION
今天我們先來(lái)看一下幾個(gè)在日常使用中常用到的超級(jí)全局變量,接下來(lái)我們通過(guò)一些實(shí)例來(lái)看一下,這些超級(jí)全局變量的一些用法和特點(diǎn)。
首先,我們先來(lái)看:
PHP $GLOBALS
$GLOBALS
是一個(gè)預(yù)定義的超全局?jǐn)?shù)組,其中包含了全局作用域中的所有可用變量,變量的名字就是數(shù)組的鍵。$GLOBALS在一個(gè)PHP腳本的全部作用域中都可以訪問(wèn)。
示例如下:
<?php //定義兩個(gè)全局變量,函數(shù)內(nèi)部不可以訪問(wèn) $a = 75; $b = 25; //定義函數(shù) function addition() { //將全局變量變?yōu)槌?jí)全局變量,這樣在函數(shù)內(nèi)部就可以正常訪問(wèn)了 $GLOBALS['c'] = $GLOBALS['a'] + $GLOBALS['b']; } //調(diào)用函數(shù) addition(); //輸出函數(shù)內(nèi)部定義的全局變量 echo $c; ?>
輸出結(jié)果:
$GLOBALS 不限定必須在函數(shù)內(nèi)部使用,在程序的任意位置都能使用。由上述示例看得出,全局變量變?yōu)槌?jí)全局變量,這樣在函數(shù)內(nèi)部就可以正常訪問(wèn)了。
global
還有一個(gè)與$GLOBALS 很類似的叫 global
關(guān)鍵字,它也可以讓我們?cè)诤瘮?shù)內(nèi)部使用在函數(shù)外部定義的全局變量。
語(yǔ)法格式如下:
global 變量1, 變量2, ...
global 關(guān)鍵字后面可以和多個(gè)變量作為參數(shù),多個(gè)變量之間以“,”(逗號(hào))分隔。同時(shí),使用global要注意一些關(guān)鍵點(diǎn):
-
global 關(guān)鍵字,不能在函數(shù)外部使用,只能在函數(shù)內(nèi)部使用;
-
global 關(guān)鍵字只能用來(lái)引用函數(shù)外部的全局變量,在引用時(shí)不能直接賦值,賦值和聲明語(yǔ)句需要分開(kāi)寫;
-
在函數(shù)內(nèi)部銷毀一個(gè)使用 global 關(guān)鍵字修飾的變量時(shí),函數(shù)外部的變量不受影響。
示例如下:
<?php $a = 1; $b = 2; $c = 3; function demo(){ global $a, $b; echo "變量 a:".$a; echo "<br>變量 b:".$b; echo "<br>變量 c:".$c; } demo(); ?>
在上述例子中,定義了三個(gè)變量,但是在函數(shù)內(nèi)global關(guān)鍵字只修飾了兩個(gè)變量,那輸出結(jié)果會(huì)有什么影響呢?
輸出結(jié)果:
可以看出,結(jié)果只輸出了變量a和b的,因?yàn)間lobal關(guān)鍵字只在函數(shù)內(nèi)修飾了兩個(gè),所以變量c沒(méi)有使用成功。
通過(guò)兩個(gè)例子我們能夠看出與 global 相比,$GLOBALS 有一下幾點(diǎn)不同:
-
global $ 指的是對(duì)函數(shù)外部同名變量的引用,是兩個(gè)互不影響的變量,而 $GLOBALS[] 指的是函數(shù)外部變量本身,是一個(gè)變量。
-
$GLOBALS 不限定必須在函數(shù)內(nèi)部使用,在程序的任意位置都能使用。
PHP $_SERVER
PHP $_SERVER準(zhǔn)確來(lái)說(shuō)是一個(gè)數(shù)組,$_SERVER 包含了頭信息、路徑、以及腳本位置等等信息。這個(gè)數(shù)組中的項(xiàng)目由 Web 服務(wù)器創(chuàng)建。服務(wù)器可能會(huì)忽略一些,不一定每個(gè)服務(wù)器都提供全部項(xiàng)目。
接下來(lái)給大家舉個(gè)例子如何使用PHP $_SERVER:
<?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)前頁(yè)的前一頁(yè)的地址(如果存在) echo "<h3>引導(dǎo)用戶代理到當(dāng)前頁(yè)的前一頁(yè)的地址(如果存在)</h3>"; echo $_SERVER['HTTP_REFERER']; echo "<hr/>"; //用來(lái)檢查瀏覽頁(yè)面的訪問(wèn)者在用什么操作系統(tǒng) echo "<h3>用來(lái)檢查瀏覽頁(yè)面的訪問(wèn)者在用什么操作系統(tǒng)</h3>"; echo $_SERVER['HTTP_USER_AGENT']; echo "<hr/>"; //包含當(dāng)前腳本的路徑 echo "<h3>包含當(dāng)前腳本的路徑</h3>"; echo $_SERVER['SCRIPT_NAME']; ?>
輸出結(jié)果
給大家分享一下,