PHPでは、変数そのものの有無や変数が空かどうかをチェックする、empty関数とisset関数が使えます。そしてこの2つの関数は、Webブラウザからフォームでサーバーに送信されたデータを処理する際によく利用されます。
しかしよく見かけることから「いつもコピペするだけで実はよく知らない」という方もいるのではないでしょうか。そこで今回はempty関数とisset関数について例を用いて、詳しく解説します。
目次
PHPではemptyとissetが必須
Webブラウザからフォームを受け取りそれを基に処理するPHPのプログラムでは、empty関数とisset関数がよく使われます。詳しい機能を知らないものの既存のプログラムからコピペして使っている、という方もいるのではないでしょうか。
次から、empty関数とisset関数が必要になる理由について解説します。
PHPには変数の型が無い
C言語やJavaを学ぶ方はかなり早い段階に変数の型の宣言について学びます。それは他のプログラム言語で変数の型を重視するからです。しかし、PHPには、変数の型がありません。
この変数の型宣言が不要というPHPの特徴はプログラムしやすいPHPのメリットの1つですが、いろいろな不都合も発生します。そして変数が空の場合に発生する不具合もその1つです。
もし、配列を処理するファンクションに空の変数が渡されたら、配列でないので処理できません。処理する前にempty関数でチェックし、空の場合は処理しないプログラムが必要です。
スーパーグローバル変数をチェックする場合
empty関数とisset関数は、WebブラウザのフォームからPOSTメソッドで送信されたデータを処理するプログラムでよく使われます。
では、POSTメソッドで送信されたデータは、PHPのスーパーグローバル変数で受け取るのをご存じでしょうか。HTMLのFORM文からPOSTメソッドで送信されたデータは、PHPのスーパーグローバル変数の1つ$_POSTに格納されます。
しかしPHPファイルが必ずFORMから呼び出されるとは限りません。そして直接呼び出された場合は$_POST変数なしでPHPが実行されます。
そのためPOSTメソッドで実行されるPHPファイルでは、isset関数でPHPのスーパーグローバル変数$_POSTの有無をチェックしてから、その変数を続くプログラムに渡す書き方が基本です。
empty関数とisset関数の基礎
先ほど説明したようにPHPのプログラムでは変数に値が入っているかをチェックしたり、変数そのものが使えるかをチェックすることがよくあります。
そして変数の値の有無をチェックする関数がemptyで、変数そのものの有無をチェックする関数がissetです。次からempty関数とisset関数の文法および簡単な使い方の例を紹介します。
empty関数の基礎
先ほど紹介したようにempty関数はPHPで変数が空であるかどうかを検査する関数です。
empty関数は検査したい変数を引数に指定するだけで、その変数が空の場合はtrueを、そうでない場合はfalseを返します。
empty( 変数 )
1 2 3 4 5 6 |
<?php $var = null; if (empty($var)) { echo "変数varは空です" } ?> |
1 2 3 4 5 |
<?php $var = null $chk = empty($var) ? "empty" : "value"; echo $chk . "\n"; // $varがnullなので、"empty"が表示される ?> |
この例のようにempty関数の返す値がtrueまたはfalseのため、if構文や3項演算子で使います。なおチェックした変数に0が代入されている場合もtrueを返すので、整数を使う場合は注意してください。
isset関数の基礎
isset関数は、変数が宣言されていること、そしてnullとは異なることを検査する関数で、該当していればtrueを、また、該当していなければfalseを返します。
先ほど説明したスーパーグローバル変数も含めて、PHPでは宣言されていない変数をプログラム内で使用してもエラーではありません。しかし、プログラムによっては正常に動作しないこともあります。そのような不具合を避けるために使われるのがこのisset関数です。
isset( 変数名 )
1 2 3 4 5 6 |
<?php if (isset($_POST['value'])) { $value = $_POST['value']; } else { $value = "default"; } |
emptyとissetを使った例
ご存じのようにWebブラウザからフォームで送信されたデータを処理するPHPのプログラムで、今回紹介しているempty関数とisset関数がよく使われます。 このような処理はPHPでプログラムを組む際の基本と言っていいでしょう。
次に、そのような処理で使われるスーパーグローバル変数、$_POSTをチェックし、送られたデータを処理する例を紹介します。
$_POSTをチェックする処理
empty関数とisset関数でスーパーグローバル変数の$_POSTをチェックする例が次のとおりです。
1 2 3 4 5 6 7 8 9 10 11 |
<?php if( isset($_POST['id'] ) { if(! empty($_POST['id] ) { $id = $_POST['id'] } else { echo "idが空です\n"; } } else { echo "フォームから呼び出してください\n"; } ?> |
この例はWebブラウザのフォームから下記のinputタグからPOSTメソッドで送信されたデータを処理する例です。
1 |
<input type="test" name="id" /> |
まずisset関数で「$_POST[‘id’]」の有無をチェックし、Webブラウザのフォームから送信されているかをチェックします。そして変数があれば次の処理へ、また、そうでない場合は「フォームから呼び出してください」のメッセージを表示します。
次に「$_POST[id’]」に格納された値をチェックします。if構文で!を付けてempty関数を使っているので、もし「$_POST[id’]」が空でない場合、$id = $_POST[‘id’]を処理します。また空の場合は「idが空です」を表示します。
issetとemptyを同時にチェックする
先ほどissetとemptyを別のif文でそれぞれチェックする例を紹介しましたが、実際にはどちらもフォーム文に戻って登録し直してもらえば済む話です。そのため、issetとemptyを同時にチェックする書き方もよく使われます。
1 2 3 4 5 6 7 |
<?php if( isset($_POST['id'] && !empty($_POST['id']) ) { $id = $_POST['id'} } else { echo "フォームから呼び出してください\n"; } ?> |
この例はisset関数のチェックとempty関数のチェック結果の&&を使うことで、$_POST[‘id’]に値が入っていれば変数$idに代入し、入っていない場合はメッセージを表示します。
empty関数の0の扱いに注意
empty関数は変数の値が0の場合、空の状態と判断します。これはPHPの内部で、1をture、0をfalseと処理するのが原因ですが、フォームで0の入力を許可するシステムでは注意が必要です。
例えば先ほど紹介した下記のPHPのプログラムでは、フォームで0を入力されると「フォームから呼び出してください」と表示されてしまいます。
1 2 3 4 5 6 7 |
<?php if( isset($_POST['id'] && !empty($_POST['id']) ) { $id = $_POST['id'} } else { echo "フォームから呼び出してください\n"; } ?> |
0を受け入れるためには下記のように、$_POST[‘id’]の値が’0’以外であることをチェックする処理の追加が必要です。
1 2 3 4 5 6 7 |
<?php if( isset($_POST['id'] && !( empty($_POST['id']) && $_POST['id'] !== '0' ) ) { $id = $_POST['id'} } else { echo "フォームから呼び出してください\n"; } ?> |
まとめ
Webブラウザからフォームで送られたデータをPHPのプログラムで処理する際によく使われる、isset関数とempty関数について解説しました。
今回紹介したisset関数とempty関数を使った例は実際のPHPのプログラムでも見かける処理です。ぜひこれらの関数の使い方をマスターし、実際のプログラムで利用してください。