PHP開發基礎教學超全域變量

概括

之前章節中提到的全域變數是不能在函數內部引用,但是超級全域變數可以

超級全域變數在PHP 4.1.0之後啟用, 是PHP系統中自帶的變量,在一個腳本的全部作用域中都可用。


一、PHP 超級全域變數

#PHP中預先定義了幾個超級全域變數(superglobals) ,這意味著它們在一個腳本的全部作用域中都可用。 你不需要特別說明,就可以在函數及類別中使用。

PHP 超級全域變數清單:

  • ## $GLOBALS

  •  $_SERVER

  •  $_REQUEST

  •  $_POST

  • # $_GET

  •  $_FILES

  • # $_ENV

  •  $_COOKIE

  •  $_SESSION

#本章節我們將講解幾個常用的超級全域變數,其餘變數我們在接下來幾個章節會介紹到。


二、PHP $GLOBALS

#$GLOBALS 是PHP的一個超級全域變數組,在一個PHP腳本的全部作用域中都可以存取。

$GLOBALS 是一個包含了全部變數的全域組合陣列。變數的名字就是數組的鍵。

以下實例介紹如何使用超級全域變數$GLOBALS

程式碼如下

<?php 
//定义两个全局变量,函数内部不可以访问
$x = 75; 
$y = 25;
//定义函数
function addition() 
{ 
//将全局变量变为超级全局变量,这样在函数内部就可以正常访问了
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
}
//调用函数
addition();
//输出函数内部定义的全局变量 
echo $z; 
?>

註:以上實例中z 是一個$GLOBALS數組中的超級全域變量,該變數同樣可以在函數外存取


三、PHP $_SERVER

$_SERVER 是一個包含了頭資訊(header )、路徑(path)、以及腳本位置(script locations)等等資訊的陣列。這個數組中的項目是由 Web 伺服器所建立。不能保證每個伺服器都提供全部項目;伺服器可能會忽略一些,或提供一些沒有在這裡列舉出來的項目。

以下實例中展示如何使用$_SERVER中的元素:

實例程式碼如下:

<?php 
//输出当前脚步的文件名
echo "<h3>输出当前脚步的文件名</h3>";
echo $_SERVER['PHP_SELF'];
echo "<hr/>";
//当前脚步所在服务器的主机名
echo "<h3>当前脚步所在服务器的主机名</h3>";
echo $_SERVER['SERVER_NAME'];
echo "<hr/>";
//当前请求头中 Host
echo "<h3>当前请求头中 Host</h3>";
echo $_SERVER['HTTP_HOST'];
echo "<hr/>";
//引导用户代理到当前页的前一页的地址(如果存在)
echo "<h3>引导用户代理到当前页的前一页的地址(如果存在)</h3>";
echo $_SERVER['HTTP_REFERER'];
echo "<hr/>";
//用来检查浏览页面的访问者在用什么操作系统
echo "<h3>用来检查浏览页面的访问者在用什么操作系统</h3>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<hr/>";
//包含当前脚本的路径
echo "<h3>包含当前脚本的路径</h3>";
echo $_SERVER['SCRIPT_NAME'];
?>

更多的 $_SERVER 變數中的重要元素請見下表:

16.png


四、PHP $_GET

PHP $_GET 被廣泛應用於收集表單數據,在HTML form標籤的指定該屬性:"method="get"。

$_GET 也可以收集URL中發送的數據。

假定我們有一個包含參數的超鏈接HTML頁面:

<html>
<body>
<!--创建个连接,连接到12_7.php,并且传过去两个值-->
<a href="test.php?subject=PHP&web=php.cn">点击,利用GET方式传值</a>
</body>
</html>

當使用者點擊連結"點擊,利用GET方式傳值", 參數"subject" 和"web" 將發送至"test.php",你可以在"test.php" 文件中使用$_GET 變數來取得這些資料。


五、PHP $_POST

$_POST 和$_GET一樣,被應用於收集表單數據,在HTML form標籤的指定該屬性:"method="post"。

#以下實例顯示了一個輸入字段(input)及提交按鈕(submit)的表單(form )。其他的PHP檔案來處理該數據,你可以修改該指定的腳本檔案名稱。 #

<html>
<body>
<!-- 接收12_6.php传来的值 -->
<?php 
echo "Study " . $_GET['subject'] . " at " . $_GET['web'];
?>
</body>
</html>

附註:因為本次提交是提交到目前頁面,所以頁面載入完成後會顯示變數fname未定義,提交過去一個值過去就會消失




六、PHP $_REQUEST

PHP $_REQUEST 用來收集HTML表單提交的數據,可以收集到POST 和GET兩種提交方式提交過來的數據。透過點擊"Submit" 按鈕提交表單資料時, 表單資料將會傳送至<form>標籤中action 屬性中指定的腳本檔案。來處理該數據,你可以修改該指定的腳本檔名。 註:fname未定義原因和上面$_POST一樣

學習心得:

一些超級全域變數沒必要全部記住,需要的時候查手冊即可

$_GET,$_POST,$_REQUEST三者之間的區別,在後面的章節會詳細介紹

繼續學習
||
<?php //定义两个全局变量,函数内部不可以访问 $x = 75; $y = 25; //定义函数 function addition() { //将全局变量变为超级全局变量,这样在函数内部就可以正常访问了 $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } //调用函数 addition(); //输出函数内部定义的全局变量 echo $z; ?>