5.6.1 使用import_request_variables()函數(shù)
使用import_request_variables()函數(shù)可以有選擇地注冊(cè)全局變量集合。你可以使用該函數(shù)導(dǎo)入 $_GET、$_POST和$_COOKIE的值,還可以為每個(gè)導(dǎo)入的變量添加前綴(prefix)。
bool import_request_variables ( string types [,string prefix])
參數(shù)中types字符串中允許為g、p、c字符,或者3個(gè)字符間任意的組合。其中,“g”表示GET變量,“p”表示POST變量,“c”表示cookies。
注意:3個(gè)字符的排列順序是有區(qū)別的,當(dāng)使用“pg”時(shí),POST變量將使用相同的名字覆蓋$_GET變量;反之,當(dāng)使用“gp”時(shí),$_GET變量數(shù)組將優(yōu)先于$_POST。
prefix參數(shù)作為變量名的前綴,置于所有被導(dǎo)入到全局作用域的變量之前。比如我們有個(gè)名為“userid”的$_GET超級(jí)全局變量數(shù)組,同時(shí)提供了“pref_”作為前綴,那么我們將獲得一個(gè)名為$pref_userid的全局變量。如果我們要導(dǎo)入其他全局變量(例如$_SERVER變量),則請(qǐng)考慮使用extract()函數(shù)(在函數(shù)一章中有介紹)。注意,在使用prefix前綴時(shí),不要與現(xiàn)有數(shù)據(jù)或變量名產(chǎn)生沖突。
使用import_request_variable()函數(shù)實(shí)現(xiàn)變量導(dǎo)入的腳本例子如下:
//導(dǎo)入POST提交的變量值,前綴為post_
import_request_variable("p", "post_");
//導(dǎo)入GET和POST提交的變量值,前綴為gp_,GET優(yōu)先于POST
import_request_variable("gp", "gp_");
//導(dǎo)入Cookie和GET的變量值,Cookie變量值優(yōu)先于GET
import_request_variable("cg", "cg_");
如果我們?cè)趇mport_request_variables()函數(shù)中使用了“pg參數(shù)”,請(qǐng)看如下腳本實(shí)例:
<?php
if(isset($_REQUEST['btn_submit'])){
echo "正常取得的表單POST變量值:".$_REQUEST['Username']."<br />";
import_request_variables("pg", "import_");
//顯示導(dǎo)入的變量名稱
echo "使用import_request_variables函數(shù)導(dǎo)入的變量值:".$import_Username;
}
?>
<form id="test_form" name="test_form" method="POST" action="">
請(qǐng)輸入您的名字:
<label>
<input type="text" name="Username" id="Username" />
</label>
<label>
<input type="submit" name="btn_submit" id="btn_submit" value="提交" />
</label>
<br />
</form>
該表單提示用戶輸入一個(gè)名字,完成并提交后,腳本會(huì)把提交的名字顯示在瀏覽器上,如圖5-4所示。
圖5-4
注意:prefix前綴參數(shù)是必選的,如果未指定前綴,或者指定一個(gè)空字符串作為變量前綴,PHP會(huì)拋出一個(gè)E_NOTICE錯(cuò)誤。
import_request_variables()函數(shù)為我們提供一個(gè)中間方法,適用于如下幾種情況:
1.當(dāng)用戶不能使用超級(jí)變量數(shù)組時(shí);
2.在php.ini配置文件的register_globals參數(shù)為Off(PHP 5之后的版本默認(rèn)為Off)時(shí),使用import_request_variables將GET/POST/Cookie這幾個(gè)超級(jí)變量數(shù)組導(dǎo)入到全局作用域中。
3.在開(kāi)發(fā)時(shí),只要聲明了引入的變量范圍,就不必寫$_GET或$_REQUEST一堆很長(zhǎng)的超級(jí)全局?jǐn)?shù)組名稱了。