【CodeLIfe】$_POSTでissetを使わずにemptyを使う理由【6日目】

codelife

お問合せフォームを作る際に、

<?php
  if(!empty($_POST)) {    //formの送信がされたとき
  }
?>

こういうif文でかこったんだけど、ここの empty がなんで isset じゃだめなのか疑問に思ったから書いていこうと思う。

目次

$_POSTでissetを使わずにemptyを使う理由

一見同じ意味に感じる「isset(セットされてる)」と「!empty(空ではない)」なんだけど、それぞれの意味を調べると違いが見えてくる

issetの意味

isset関数は、変数に値がセットされていて、かつNULLでないときに、TRUE(真)を戻り値として返します。NULLとは、変数が値を持っていないことをあらわす特別な値です。

TechAcademy

これは要するに、変数にNULLがあるかそうでないかを判断する関数で、例えば変数に0が入ってたとしても、それはNULLではないため true を返すという意味らしい。

つまり isset が faulse を示す条件は、「変数が定義されてない」か「NULL」の二種類しかない

emptyの意味

一方、emptyはその変数が空かどうかを調べる関数で、空の場合 true を返すんだけど、その条件が、

  • “” (空文字列)
  • 0 (整数 の 0)
  • 0.0 (浮動小数点数の 0)
  • “0” (文字列 の 0)
  • NULL
  • faulse
  • array() (空の配列)

と結構たくさんある。

$_POSTは array配列

ここで考えなくちゃいけないのが$_POSTの性質なんだけど、$_POSTの中身はarray配列でできている

<?php
  if(!empty($_POST)) {    //formの送信がされたとき
  }
?>

は、$_POSTが空ではないときに以下のプログラムを行うというif構文だから、$_POSTが空の(フォームが送信されてない)ときは faulse 空ではない(フォームが送信された)ときは trueにならないといけない。

ただここで isset を使うと array では反応する空の連想配列に反応しなくなって、どちらもtrueになってしまう。これが$_POSTでissetを使わずにemptyを使う理由です。

PHPは難しいですね汗

今日の進捗

  • PHP入門の動画8本

今日は全く集中できなかった。ここ何日か順調に来ていただけに少し残念だが、こういう日もあると思う。

明日の目標

PHPの入門はあと動画12本で終わりだから、明日中に終わらせてCodeLifeの次お課題に取り組みたいと思う。

次はjQueryをすこしやって、PHPでサービスを作って見る予定だ。楽しみ。

よかったらシェアしてね!

コメント

コメントする

CAPTCHA


目次
閉じる