本記事では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ではできません。
- TRUE/FALSEを判定する
- 空文字や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つです。
- empty
- 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の方が主流です。
「この関数はこの判定で使うもの」と覚えておくと迷いなく使えるようになります。