PHPのスーパーグローバル$_REQUESTは$_POSTと$_GETのどちらが優先されるのか?

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

こんにちわ。
 

プログラムできるけど、言語仕様は知らないことがまだまだある、下駄です。
 

PHPを覚えたての頃、$_POSTと$_GETよりも、$_REQUESTとして使ったほうがめんどくさくなくて便利じゃん!!!と、考えて
 

仕事で使いまくっていたんですが、
 

GETクエリとPOSTリクエストは、きちんと分けて使ったほうが、効率的なデータ送信ができるという事を理解して、今ではあまり使っていません。
 

リファレンスページで知った$_COOKIEの存在

https://www.php.net/manual/ja/reserved.variables.request.php
 

こちらのPHPリファレンスページに書かれている内容では、$_POSTと$_GETと$_COOKIEが、$_REQUESTとして集約されるという事だったんだが、$_COOKIEの存在を気にしたことがなかった!!!
 

あまりcookieを多様するwebページは作らない主義なのだが、もしkeyがかぶっていたら、とんでもないトラブルになっていただろう・・・お〜こわ!
 

デフォルトの優先順位の確認

とりあえず、$_POSTと$_GETで同じkeyでリクエストした場合に、どちらが優先されるのかを確認しておく。
 

ただし、これは、php設定で、優先順位を切り替えられるとの事なので、あくまでデフォルトの確認ということを理解して欲しい。
 

 

チェックするプログラムは上記のものを用意した。
 

まず、アクセスしてみる。
 

http://localhost/check.php
 

クエリが何もない状態では、以下の通り。
 


 

次にGETクエリを付けて表示
 

http://localhost/check.php?test=aaa
 


 

ちゃんと、”aaa”が表示されているのが確認できた。
 

次に、この状態で、POSTに文字を入れて送信してみる。
とりあえず、用意されているinputタグにGETクエリと違う文字を入力。
 


 

送信すると・・・
 


 

おお!、POST > GETという優先順位が確認できた。
 

なんとなく想像どおりだ。
 

多分Cookieが入った場合は、
POST > GET > COOKIE
なのだろうということも容易に想像できる。
 

こういう特性を理解しておかないと、知らずに使ってトラブったときは、プログラマーの責任ですからね。
 

「知らないは、罪」という話でした。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です