PHPのisset関数の使い方や挙動について書いています。
書いているコードはPHPバージョン8で確かめました。

isset関数について
isset関数は渡した変数が宣言されていること、そして変数がnullじゃないことをチェックしてくれます。
if (isset($hoge)) {
// issetでtrueだった場合の処理
}
上記のように使うことができます。
引数に渡した$hogeに値が入っていれば、trueになります。
値が入っていなかったり、nullの場合はfalseが返ってきます。
個人的には、引数はひとつだけ渡して使用することが多いです。
ですが、チェックする引数として、複数渡すことも可能です。
isset($hoge, $fuga, $piyo);
複数の引数を渡した場合は、全ての引数に値が格納されている場合だけtrueになります。
ひとつでも値が入っていない場合はfalseです。
それでは次項のサンプルコードで、実際にどのような挙動になるか確認しましょう。
isset関数についての挙動確認
isset関数を使ったサンプルコードを見ていきます。
数値が入力されている
変数に数値を入れた場合です。
trueになって、結果は「値が入力されています!」になります。
<?php
$value = 7;
if (isset($value)) {
echo "値が入力されています!";
} else {
echo "値が入力されていません。";
}
空文字が入力されている
変数に空文字(“”)を入れた場合です。
trueになって、結果は「値が入力されています!」になります。
<?php
$value = "";
if (isset($value)) {
echo "値が入力されています!";
} else {
echo "値が入力されていません。";
}
0が入力されている
変数に0を入れた場合です。
trueになって、結果は「値が入力されています!」になります。
<?php
$value = 0;
if (isset($value)) {
echo "値が入力されています!";
} else {
echo "値が入力されていません。";
}
nullが入力されている
変数にnullを入れた場合です。
falseになって、結果は「値が入力されていません。」になります。
<?php
$value = null;
if (isset($value)) {
echo "値が入力されています!";
} else {
echo "値が入力されていません。";
}
何も設定していない変数が入力される
変数に値が何も設定されていない場合です。
falseになって、結果は「値が入力されていません。」になります。
<?php
if (isset($value)) {
echo "値が入力されています!";
} else {
echo "値が入力されていません。";
}
trueが入力される
変数にtrueが入力されている場合です。
trueになって、結果は「値が入力されています!」になります。
<?php
$value = true;
if (isset($value)) {
echo "値が入力されています!";
} else {
echo "値が入力されていません。";
}
falseが入力される
変数にfalseが入力されている場合です。
trueになって、結果は「値が入力されています!」になります。
<?php
$value = false;
if (isset($value)) {
echo "値が入力されています!";
} else {
echo "値が入力されていません。";
}
空配列が入力される
変数に空配列が入力されている場合です。
trueになって、結果は「値が入力されています!」になります。
<?php
$value = [];
if (isset($value)) {
echo "値が入力されています!";
} else {
echo "値が入力されていません。";
}
クラスのインスタンスが変数に入力される
変数にクラスのインスタンスが入力されている場合です。
trueになって、結果は「値が入力されています!」になります。
<?php
class Test {
}
$value = new Test();
if (isset($value)) {
echo "値が入力されています!";
} else {
echo "値が入力されていません。";
}
isset関数で複数の引数を渡してみる
複数渡したパターンも試してみました。
$param1,$param2,$param3全てに値が格納されていればtrueになります。
ひとつでも値が設定されていないかnullの場合にfalseです。
下記の場合は、全て値が設定されているので、結果は「値が入力されています!」です。
<?php
$param1 = 100;
$param2 = 200;
$param3 = false;
if (isset($param1, $param2, $param3)) {
echo "値が入力されています!";
} else {
echo "値が入力されていません。";
}
isset関数で定数を渡すとエラーになる
isset関数を使った場合に定数や、値を直接渡すとエラーになります。
PHP Fatal error: Cannot use isset() on the result of an expression
下記のようなコードは全てNGです。
isset関数には変数しか渡せません。
<?php
define("TEST_NUMBER", 100);
isset(TEST_NUMBER); // エラーになる
isset(100); // エラーになる
isset(""); // エラーになる
isset(true); // エラーになる
isset関数の挙動まとめ
サンプルコードで確認した挙動をまとめてみました。
| 入力値 | 返り値 |
|---|---|
| 7 | true |
| “” | true |
| 0 | true |
| null | false |
| $value | false |
| true | true |
| false | true |
| [] | true |
| new Class() | true |
falseが入った変数もisset関数ではtrueで判定されました。
「未定義の変数」もしくは「null」だけが、falseになるという認識でいれば良さそうですね。

コメント