プログラムでは変数が空やNULLの値を参照することにより例外エラーが発生することがよくあります。
PHPでは例外エラーを防ぐために、あらかじめ変数に値がセットされているか、確認するための関数が用意されています。
この記事ではisset関数の
・isset関数とは?
・isset関数の基本的な使い方
といった基本的な内容から、
・isset関数をif文で使用する方法
・iseet関数を三項演算子で使用する方法
・isset関数で配列の要素を調べる方法
・empty関数を使用する方法
・isset関数のパフォーマンス
などのisset関数の応用的な使い方に関しても解説していきます。
また、指定した名前の定数が存在するか確認するdefinedについても合わせて紹介します。
ここでは、そんなisset関数について詳しく解説いたします!
isset関数とは
変数がセットされているか、NULLではないかを確認するにはisset関数を使用します。
書き方:
bool isset($変数名1 [, $変数名2 ...])
引数:
引数には1つまたは複数の変数名を指定します。
変数名を指定することで、その変数がセットされているか、NULLではないかを調べます。
返り値:
値が設定されていたらTRUEを返し、設定されていなかったらFALSEを返します。
複数の変数を指定した場合は、全ての変数に値がセットされている場合のみTRUEを返します。
isset関数の基本的な使い方
ここでは、isset関数の基本的な使い方から、条件文や三項演算子で使用する方法などを解説していきます。
基本的な使い方
実際にisset関数を使用して変数の値がセットされているか、確認してみましょう。
以下にisset関数の基本的な使い方を記述します。
サンプルプログラム
<?php $text1 = "samurai"; $text2 = "engineer"; //値がセットされているか、調べる var_dump(isset($text1)); var_dump(isset($text1, $text2)); //変数の値を削除する unset($text1); var_dump(isset($text1)); var_dump(isset($text1, $text2)); ?>
実行結果:
bool(true) bool(true) bool(false) bool(false)
サンプルでは変数にそれぞれ値をセットし、isset関数で値がセットされているか、確認しています。
値がセットされていればTRUEを返し、unset関数で値を削除後に再度isset関数で確認すると、FALSEを返していることがわかりますね!
isset関数で複数の変数をセットした場合、1つでも値がセットされていなければFALSEを返します。
if文で使用する
isset関数は返り値にbool(真偽値)を返すので、if文で使用することもできます。
以下にisset関数をif文で使用する方法を記述します。
サンプルプログラム
$text = "samurai"; if(isset($text)){ echo '値がセットされています<br>'; //値を削除する unset($text); if(!(isset($text))){ echo '値がセットされていません'; } }
実行結果:
値がセットされています 値がセットされていません
以下のようにPOSTメソッドやGETメソッドからの変数の存在を確認するときも、isset関数を使用すれば便利です。
if isset(!isset($_POST['****']){ $error = '***が設定されていません' } if isset(!isset($_GET['****']){ $error = '***が設定されていません' }
iseet関数を使用した判定文や、変数がNULLか確認する方法については、以下の記事でも詳しく解説しています!
三項演算子で使用する
isset関数による判定は、三項演算子で記述することで、より簡潔に処理を記述することができます。
以下に三項演算子によるisset関数の判定文を記述します。
サンプルプログラム
$text = "samurai"; $ans = isset($text) ? '値がセットされています' : '値がセットされていません'; echo $ans;
実行結果:
値がセットされています
三項演算子については、以下の記事で詳しく解説していますので、ざひ参考にしてくださいね!
配列の要素を調べる方法
isset関数を使用すれば、配列の要素が空か調べることもできますが、以下のように1つの要素にNULLを指定しても、isset関数はTRUEを返してしまいます。
サンプルプログラム1
$array = [1, 2, 3, 4, 5]; var_dump(isset($array)); $array[2] = null; var_dump(isset($array));
実行結果:
bool(true) bool(true)
そのため、isset関数を使用して配列の要素に値がセットされているか調べたい場合は、foreach文のループ処理で要素を1つずつ確認する方法が確実です。
サンプルプログラム2
$array = [1, 2, 3, 4, 5]; $array[2] = null; foreach ($array as $key => $value) { var_dump(isset($array[$key])); }
実行結果:
bool(true) bool(true) bool(false) bool(true) bool(true)
また、以下のように連想配列に対しても値を調べることができます。
サンプルプログラム3
$fruits = [ 0=>'apple', 1=>'orange', 2=>NULL, 3=>0, 4=>'banana' ]; var_dump(isset($fruits[1])); var_dump(isset($fruits[2])); var_dump(isset($fruits[3]));
実行結果:
bool(true) bool(false) bool(true)
emptyで変数が空か確認する
isset関数とよく似た関数として、empty関数があります。
empty関数は、変数が空であるかどうか確認し、空や0の場合はTRUEを返します。
書き方:
bool empty ( $変数名 )
以下のような場合は空とみなされます。
「"" (空文字列)」「0 (整数 の 0)」「0.0 (浮動小数点数の 0)」「"0" (文字列 の 0)」「NULL」「FALSE」「空の配列」「空の変数」
また、isset関数とは返り値が逆なので注意しましょう。
isset関数:空やNULLの場合はFALSE
empty関数:空やNULLの場合はTRUE
以下にempty関数を使用して、変数が空か調べる方法を記述します。
サンプルプログラム
$text = "samurai"; //値がセットされているか、調べる var_dump(empty($text)); //変数の値を削除する unset($text); var_dump(empty($text));
実行結果:
bool(false) bool(true)
empty関数を使用して変数が空か判定する方法や、配列の要素が空か調べる方法については、以下の記事でも詳しく解説しています!
定数の有無を調べる方法(defined)
指定した名前の定数が存在するか調べるにはdefinedを使用します。
書き方:
bool defined( 定数 )
引数:
対象の定数を指定します。
返り値:
指定した定数が定義されてたらTRUE、それ以外はFALSEを返します。
以下にdefinedを使用して定数が定義されているか、確認するサンプルを紹介します。
サンプルプログラム:
//定数を定義する define('CONSTNUM1', 100); if (defined('CONSTNUM1')) { echo CONSTNUM1; }
実行結果:
100
定数については以下の記事でも詳しく紹介していますので参考にしてくださいね!
isset関数のパフォーマンスはどうなの?
変数の値が空かNULLか調べるのにisset関数は便利ですが、速度面ではどうなのでしょうか?
以下の記事ではisset関数と、配列のキーが空か調べるarray_key_exists関数で、どちらの検索処理が早いか?比較を行っています。
気になる方はぜひ確認してみてくださいね!
まとめ
ここではisset関数を使用して、
・変数の値がセットされているか確認する方法
・判定文で使用する方法
・配列の要素を調べる方法
・empty関数で変数がセットされているか調べる方法
などについて、解説しました。
また、定数の存在有無を調べるdefinedについても紹介しました。
実際のプログラムでも変数の値がセットされているか、調べる処理はよく使用します。
もし、isset関数の使い方を忘れてしまったら、この記事を思い出してくださいね。