【PHP】isset()とempty()の使い方とJavaScriptとの違い

PHP

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-emptyhttps://qiita.com/sibusuke/items/d95275c89a623b805441などを参考にしてみるといいです。

issetとemptyの注意点

注意点として、どちらも未定義の変数に対して警告がでないので、
変数名のタイプミスに気づけないことがあるので、注意が必要です。

PHP

Posted by devsakaso