大家都知道使用$_REQUEST可以直接省去了判斷post,get一些代碼,使用起來更簡單,但是如果要詳細的去想我們會覺得$_REQUEST太可怕了。下面看分析。
我們都知道,處理表單數據,可以使用PHP的$_GET和$_POST這兩個超全局變量,具體是哪個由form表單提交時的method指定。除此之外PHP還為我們提供了$_REQUEST數組。但是其不僅包含$_GET和$_POST的所有數據元素,同時其還會包含$_COOKIE這個超全局數組的所有數據元素。
可是大家有沒有想過,如果這三個數組裡面的key相同,那麼我用$_REQUEST得到的到底是哪個數組的值呢?會不會有什麼問題?
我用如下代碼為大家做演示,因為只是想說明問題,所以這裡面不對$_COOKIE進行設置,請大家自行處理:
當我提交表單的時候,我獲取的頁面內容為:
string(3) "xxx" string(3) "yyy" string(3) "yyy"
同樣的內容,在$_REQUEST裡面,POST的值覆蓋了GET的值,這到底是怎麼回事呢?
其實這是在PHP的配置文件裡面設置的,讓我們來看一下php.ini這個配置文件,在第466行左右有如下內容:
; This directive describes the order in which PHP registers GET, POST, Cookie,
; Environment and Built-in variables (G, P, C, E & S respectively, often
; referred to as EGPCS or GPC). Registration is done from left to right, newer
; values override older values.
variables_order = "EGPCS"
這個EGPCS就是說明用$_REQUEST數組獲取內容的優先級,其字母的含義分別代表為:E代表$_ENV,G代表$_GET,P代表$_POST,C代表$_COOKIE,S代表$_SESSION。後面出現的數據會覆蓋前面寫入的數據,其默認的數據寫入方式就是EGPCS,所以POST包含的數據將覆蓋GET中使用相同關鍵字的數據。
$_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比較慢。通過post和get方法提交的所有數據都可以通過$_REQUEST數組獲得