PHP

第4章 スーパーグローバル

  1. 最終更新日:
  2. 公開日:

この章では、PHPのスーパーグローバルについて学びます。いきなりカタカナの聞きなれない単語が出てきてしまいましたが、実体はデータの入った配列のことなので難しいものではありません。

スーパーグローバルって?

スーパーグローバルは、PHPが自動的に用意してくれる配列です。図1のように、いくつか種類があります。

図1:色々なスーパーグローバル

色々なスーパーグローバル

今回は$_GET$_POST$_REQUESTの3つを見ていきましょう。それ以外は以降の章でみていきます。

通信方式について

上記のスーパーグローバルを見ていく中で、必ず知っておいた方が良いPHPの通信方式について解説します。
ここでいう「通信」とはクライアントとサーバー間で行う通信のことです。

図2:クライアントとサーバーの通信

クライアントとサーバーの通信

この通信を行う方式(「通信メソッド」とも言います)にはいくつか種類があるのですが、PHPが扱うものは大きく分けて「GET通信」と「POST通信」の2種類です。

この2つの違いは、「通信でやり取りするデータが他の人からも見える状態か」という点です。
GET通信の場合はデータをURLに含めて通信するため、他の人からもデータを見ることができます。
一方、POST通信はURLではなく通信データの本体内にデータを組み込んで通信を行うため、他の人からは見えない状態で行われます。

図3:GET通信とPOST通信それぞれのデータ受け渡し方法

GET通信とPOST通信それぞれのデータ受け渡し方法

「通信のデータは見えない方がいいんじゃないの?」と思われるかもしれませんが、実際には見えた方が良い場合があります。
例えば、ブログサイトのカテゴリーや記事ページのID、検索のキーワードなどのデータは他の人から見られても困るものではありません。
データがURLに含まれているので、そのURLをそのまま他の人に伝えるだけで同じデータを使ったページへアクセスすることが可能になります。
他の人からも見えるデータは、共有するためのデータとして考えることもできます。

お問い合わせフォームなど、個人情報のような大切な情報を入力するページではPOST通信を使用します。

$_GET

$_GETは、GET通信でデータが渡されたときに自動的に作られる配列です。

GET通信のパラメータは図3のように「?」の後ろから始まるものです。
データが複数ある場合は「&」で区切られ、それがそのまま$_GETに入れられて渡されるという仕組みです。

図4:GET通信のパラメータと$_GETの関係

GET通信のパラメータと$_GETの関係

$_GETへデータが渡されることで、PHPからは以下のようにアクセスできるようになります。

code4-1.php

<?php
// ページ数を表示
var_dump($_GET['page']);

// カテゴリーを表示
var_dump($_GET['category']);

// IDを表示
var_dump($_GET['id']);

配列と同じアクセス方法です。
上記コードを「http://localhost/code4-1.php?page=5&category=drink&id=14」のURLで実行すると、下記のように出力されます。

出力結果:

string(1) "5" string(5) "drink" string(2) "14"

Note

var_dump関数は開発時によく使用されるデバッグ用の関数です。
変数や配列の中身を型まで含めて出力してくれるため、意図した値がちゃんと代入されているかを確認したいときに非常に便利です。

$_POST

もう一つの$_POSTは、POST通信でデータが渡されたときに自動的に作られる配列です。

通信方式の違い以外は、$_GETと同様です。
受け取ったデータへのアクセスも「code4-2.php」のように行うことができます。

code4-2.php

<?php
var_dump($_POST['name']);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Test<?/title>
</head>
<body>
  <form method="POST" action="">
    <p>氏名:<input type="text" name="name" value=""></p>
    <p><input type="submit" name="submit" value="送信"></p>
  </form>
</body>
</html>

実行してみると、最初は受け取ったデータが無いのでページ上部に警告文や「NULL」が表示されてしまいますが、「氏名」フォームに入力し「送信」ボタンを押すと、入力した内容が出力されます。

$_REQUEST

$_REQUESTは、GET通信、POST通信のどちらのデータを渡されても自動的に作られる配列です。
$_GET$_POSTを合わせたようなものだと考えてください。どちらの通信方式でデータが渡されるか分からないときに使用します。

PHPからのアクセス方法については、$_GET$_POSTと同様です。

code4-2.php(修正)

<?php
var_dump($_REQUEST);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Test<?/title>
</head>
<body>
  <form method="POST" action="">
    <p>氏名:<input type="text" name="name" value=""></p>
    <p><input type="submit" name="submit" value="送信"></p>
  </form>
</body>
</html>

上記コードを「http://localhost/code4-2.php?page=5&category=drink&id=14」などで実行してみてください。
最初はGET通信のデータのみしか表示されませんが、「氏名」を入力して「送信」ボタンを押すと、GET通信のデータに合わせてPOST通信のデータも出力されるようになります。

Note

$_REQUESTにはGET通信やPOST通信のデータの他に、COOKIEなどのデータが含まれています。PHPを実行する環境によって異なりますが、基本的にはこの3種類が代入されます。

まとめ

スーパーグローバルについてみてきました。通信方式によって自動的に作られる配列の違いを理解いただけたら、この章の内容はOKです。

この章で学んだこと

  • クライアントとサーバーの間の通信について、PHPでは「GET通信」と「POST通信」の2種類がある
  • GET通信でPHPに渡されたデータがあると$_GET配列を自動的に作成する
  • POST通信でPHPに渡されたデータがあると$_POST配列を自動的に作成する
  • $_REQUESTから、$_GET$_POSTの両方へアクセスできる

記事一覧

  1. 第1章 PHPが動く仕組み
  2. 第2章 変数と定数
  3. 第3章 配列
  4. 第4章 スーパーグローバル
  5. 第5章 クッキーとセッション
  6. 第6章 サーバー情報の取得
  7. 第7章 if文
  8. 第8章 switch文
  9. 第9章 while文
  10. 第10章 for文
  11. 第11章 foreach文
  12. 第12章 独自の関数
  13. 第13章 オブジェクト指向
  14. 第14章 クラス
  15. 第15章 オブジェクト

記事一覧