【PHP】isset()とempty()の使い方とJavaScriptとの違い
PHPで値の確認のときに頻繁に使うisset()とempty()の使い方を紹介します。
またJavaScriptとの違いについてもまとめました。
isset()とempty()
phpのisset()はnull以外の値でtrue
phpでは、JavaScriptにはないisset()を使って値の確認を行うことが多いです。
issetは、変数が定義されており、かつnull以外の値のときにtrueを返します。
$num = 0;
$num2 = 2;
if(isset($num)) {
echo '値あるよ';
} else {
echo '値ないよ';
}
// 値あるよ
上の場合、0でfalsyな値ではあっても、値が定義されていて、かつ、nullではないため、trueとなります。
このように、基本的には変数が定義されている場合、trueを返します(nullと定義しない限り)
issetがfalseになるケース
if(isset($num5)) {
echo '値あるよ';
} else {
echo '値ないよ';
}
// 値ないよ
上のように定義していない変数の場合、falseになります。
$num8 = null;
if(isset($num8)) {
echo '値あるよ';
} else {
echo '値ないよ';
}
// 値ないよ
上のようにnull、空ですよと定義した場合、falseになります。
JavaScriptでやるphpのisset()を使いたい場合
JavaScriptでやる場合は、
if (typeof obj.foo !== 'undefined') {
// your code here
}
と通常はtypeofを使って確認する方法を使います。
その他にも関数で定義したり、inはhasOwnPropertyを使う方法もあります。
詳しくは、stackoverflowがわかりやすいです。
phpのempty()はisset()がfalseの場合か値がfalsyなときにtrue
empty()は、isset()がfalseの場合か値がfalsyなときにtrueを返します。
$num = 0;
$num2 = 3;
if(empty($num)) {
echo '空ですよ';
} else {
echo '空じゃないですよ';
}
// 空ですよ
falsyな値をいれるとtrueになります。
- “"(空文字)
- NULL
- 0(数値、文字列)
- FALSE
phpは文字列の「0」もfalsyな値として認識される点に注意しましょう。
!empty()で「空でないとき」
否定の論理演算子をつけて、「空でないとき」を確認したい場合によくempty()を使います。
if(!empty($num)) {
...
}
空の判定の注意点
空の判定は言語でマチマチで、phpとJavaScriptでも違うので注意が必要です。
参考:https://ka2.org/javascript-function-that-can-determine-whether-specific-value-is-emptyやhttps://qiita.com/sibusuke/items/d95275c89a623b805441などを参考にしてみるといいです。
issetとemptyの注意点
注意点として、どちらも未定義の変数に対して警告がでないので、
変数名のタイプミスに気づけないことがあるので、注意が必要です。