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の違い - ほげほげ(仮)
以上です。