nicson (@_@) IT漂流記

プログラミングについて興味がわいたことをつぶやいていきます

PHPの入力値確認ではなぜisset関数ではなくempty関数を使うのか

こんにちはnicsonです。

PHPで遊んでいて気になったことが。それは、

「POST値の存在確認はなぜisset関数ではなくempty関数を使うのか」
についてです。

よくあるPOST送信の確認は以下のように行います

if(!empty($_POST)){              //POST送信された場合
  $name = $_POST['name'];  //POSTで渡されたname変数の値を格納
}

不思議なのは、値がnullでないことを確認するにはisset関数をつかうのでは?
ということです。
ここで、empty関数ではなくisset関数をもちいて以下のようにかくとこうなります

if(isset($_POST)){
  $name = $_POST['name'];  //POSTで渡されたname変数の値を格納
}

しかしこれではPOSTされていないときでもisslet($_POST)がtrueとなってしまい、
目的どおりの動きをしてくれません。

これには単純な理由があって$_POST変数はarray配列のため、POST送信
されていないときは、要素が0個のarray配列となり、その場合、
isset関数ではnullではないのでtrueとなり、要素が1個以上の場合もtrueとなってしまいます。

empty関数では要素が0個のarray配列の場合、trueとなり、要素が1個以上
のarray配列の場合、falseとなるので、POST送信の確認ができるというわけです。

isset関数とempty関数の違いについてはほげほげさんで詳しく説明されています
emptyとissetの違い - ほげほげ(仮)

以上です。