PHP基本編4:PHPのissetの使い方は?emptyやis_nullとの違いも解説

PHP入門

本記事ではPHPのisset関数の使い方について解説します。

isset関数は仕様が分かりにくく、初心者にとって覚えにくいものの1つです。

今回はiseet関数によく似た、is_nullやemptyについても解説し、それぞれの仕様について区別できるようにしていきます。

PHPのissetの使い方

isset関数は変数に値が宣言(セット)されているかを確認するための関数です。

issetは変数に値が宣言されていればTRUE、されていなければFALSEを返します。

例をみていきましょう。

○コード例

<?php
	if (isset($val)) {
		echo "宣言されています";
	}
	else {
		echo "宣言されていません";
	}
?>

○実行結果

$valにはまだ何の値もセットされていません

そのため「isset($val)」はFALSEを返します。

逆に、次のように値がセットされていればissetはTRUEを返します。

○コード例

<?php
	$val = “aaa”;
        if (isset($val)) {
		echo "宣言されています";
	}
	else {
		echo "宣言されていません";
	}
?>

○実行結果

これがisset関数の基本的な使い方となります。

基本的にはissetは、値が宣言されているならTRUEを返します

ただ、1つだけ例外があります。

それはNULLが入っている場合です。

○コード例

<?php
	$val = NULL;
        if (isset($val)) {
		echo "NULLでありません";
	}
	else {
		echo "NULLです";
	}
?>

○実行結果

上記のようにNULLが入っている場合に関しては、issetはFALSEを返します。

「NULL or 宣言なし」はissetはFALSEを返すとおぼえましょう。

issetでは判定できないこと

issetは宣言された変数なのかどうか、もしくはNULLなのかを判定するための関数です。

よく誤解されるのですが、次の2つの判定はissetではできません

  1. TRUE/FALSEを判定する
  2. 空文字や0かどうかを判定する

以上の2つについて詳しく解説していきます。

1)TRUE/FALSEを判定する

isset関数はあくまで値が宣言されているかを確かめるものです。

値がセットされていれば、NULL以外ならどんな値でもTRUEを返します

○コード例

<?php
	$val = TRUE;
	if (isset($val)) {
		echo "TURE";
	}
	else {
		echo "FALSE";
	}
?>

○実行結果

上記のように$valの中身がTRUEの場合、issetはTRUEを返します。

では、$valの中身がFALSEの場合はどうでしょう。

○コード例

<?php
	$val = FALSE;
	if (isset($val)) {
		echo "TURE";
	}
	else {
		echo "FALSE";
	}
?>

○実行結果

$valの中身はFALSEですが、TRUEを返しています。

つまりissetはTRUE/FALSEに関係なく、値がセットさえされていればTRUEを返すということです。

2)空文字や0かどうかを判定する

値が空文字や0かどうかもissetでは判定できません

○コード例

<?php
	$val = "";
	if (isset($val)) {
		echo "空文字ではありません\n";
	}
	else {
		echo "空文字です\n";
	}

	$val = 0;
	if (isset($val)) {
		echo "0ではありません\n";
	}
	else {
		echo "0です\n";
	}
?>

○実行結果

「$val = “”」を指定した場合、issetはTRUEを返しています。

また、「$val = 0」でもTRUEを返しています。

issetはNULL以外ならTRUEを返す仕様のためです。

issetと似た機能を持った関数について

isset関数とよく似た仕様の関数は次の2つです。

  1. empty
  2. is_null

これらの関数はissetと仕様が異なり、使う場面も異なります。

それぞれどういった場面で使うのかについて詳しく解説しましょう。

1)empty

emptyは変数が空(空文字、0、NULL、FALSEなど)の場合はTRUEを返します。

○コード例

<?php
	$val = "";
	if (!empty($val)) {
		echo "空文字ではありません";
	}
	else {
		echo "空文字です";
	}
?>

○実行結果

上記のように$valが空文字の場合、emptyはTRUEを返します。

○コード例

<?php
	$val = FALSE;
	if (!empty($val)) {
		echo "TURE";
	}
	else {
		echo "FALSE";
	}
?>

○実行結果

上記のように$valがFALSEの場合でもTRUEを返します

0や空文字かどうかはissetでは判定できません。

しかし、emptyではそれらを判定することが可能というわけです。

2)is_null

is_nullは変数がNULLの場合、あるいは宣言されていない場合にTUREを返します。

issetは「NULL or 宣言なし」でFALSEを返すため、is_nullと逆のような動きをします。

○コード例

<?php
	$val = NULL;
	if (is_null($val)) {
		echo "NULLです";
	}
	else {
		echo "NULLではありません";
	}
?>

○実行結果

上記のように$valがNULLの場合に、is_nullはTRUEを返しています。

一見すると、is_nullでできることはissetでも可能なように思えます。

ただ、関数名を見れば分かる通り、一般的には「宣言されているか」を確認する場合はisset、「NULLか」を確認する場合はis_nullが使われます

issetは定数には使えない

注意点ですがissetに定数を使うことはできません

○コード例

<?php
	defined("TEISUU","Hello World!!");

	if (isset(TEISUU)) {
		echo "宣言されています";
	}
	else {
		echo "宣言されていません";
	}
?>

○実行結果

上記のようにissetに定数を指定すると、エラーが出てしまいます。

エラーが出るとプログラム全体が当然動きません。

定数はissetでは判定しないように気をつけましょう

定数について詳しく知りたい方はPHP基本編2:PHPで定数を定義するには?クラス内で定義・呼び出しする方法も解説!を参考にしてください。

まとめ

本記事ではPHPのisset関数について解説しました。

isset関数を使うことで「宣言されているか」「NULLか」を判定することができます。

ただし、issetは変数がFALSEや空文字かは判断できず、その場合emptyが使われます

また、「NULLか」を判定する場合は、is_nullの方が主流です。

「この関数はこの判定で使うもの」と覚えておくと迷いなく使えるようになります。

❤内容は役に立ちましたか?皆さまのご意見が励みになります☺
YesNo
無料でスキルを学んでからIT業界に転職

そろそろ本気で将来のことを考えなくちゃ……手に職をつけてIT業界に転職したいなぁ。でも、業界未経験だから、なんか敷居が高そう、と思っている方へ。

これからIT業界への転身を目指すあなたに、無料でスキルアップできて、平均で年収は90万円もアップできるんです。

PHP入門
【この記事を書いた人】
谷津弘樹

某自社開発のIT企業に勤めていた元webプログラマーです。主にサーバーサイド側を担当し、phpを使った開発経験があります。現在は退職しフリーランスライターとして活動中。IT系の記事を主に執筆し生計を立てています。

タイトルとURLをコピーしました