プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、is_nullとissetとemptyの違い。
PHPってのは基本的にゆるゆるな言語ですが、
ゆるゆるだからこそ分かりにくいときもあったりします。

と言う訳で今日はis_nullとissetとemptyの違いを
メモっておくよ~。

ちなみにそれぞれの意味はこんな感じφ(--)

 is_null() → NULLですか~?

 isset() → 変数に何か設定されてますか~?

 empty() → 値は空ですか~?

考えても良く分からなかったら
実際にコード書いてみると楽ですよ。

例えばこんなコードφ(--)を実行すると……

  <?php
      //空文字
      $val01 = "";
      //数字のゼロ
      $val02 = 0;
      //NULL
      $val03 = null;
      //空の配列
      $val04 = array();
      //未初期化
      $val05;
  
      print '空文字<br />';
      print 'is_null:' . (is_null($val01) ? 'TRUE' : 'FALSE') . '<br />';
      print 'isset:' . (isset($val01) ? 'TRUE' : 'FALSE') . '<br />';
      print 'empty:' . (empty($val01) ? 'TRUE' : 'FALSE') . '<br />';
      print '<br />';
  
      print '数字のゼロ<br />';
      print 'is_null:' . (is_null($val02) ? 'TRUE' : 'FALSE') . '<br />';
      print 'isset:' . (isset($val02) ? 'TRUE' : 'FALSE') . '<br />';
      print 'empty:' . (empty($val02) ? 'TRUE' : 'FALSE') . '<br />';
      print '<br />';
  
      print 'NULL<br />';
      print 'is_null:' . (is_null($val03) ? 'TRUE' : 'FALSE') . '<br />';
      print 'isset:' . (isset($val03) ? 'TRUE' : 'FALSE') . '<br />';
      print 'empty:' . (empty($val03) ? 'TRUE' : 'FALSE') . '<br />';
      print '<br />';
  
      print '空の配列<br />';
      print 'is_null:' . (is_null($val04) ? 'TRUE' : 'FALSE') . '<br />';
      print 'isset:' . (isset($val04) ? 'TRUE' : 'FALSE') . '<br />';
      print 'empty:' . (empty($val04) ? 'TRUE' : 'FALSE') . '<br />';
      print '<br />';
  
      print '未初期化<br />';
      print 'is_null:' . (is_null($val05) ? 'TRUE' : 'FALSE') . '<br />';
      print 'isset:' . (isset($val05) ? 'TRUE' : 'FALSE') . '<br />';
      print 'empty:' . (empty($val05) ? 'TRUE' : 'FALSE') . '<br />';
      print '<br />';
  
  ?>



こんな結果になるφ(--)

  空文字
  is_null:FALSE
  isset:TRUE
  empty:TRUE
  
  数字のゼロ
  is_null:FALSE
  isset:TRUE
  empty:TRUE
  
  NULL
  is_null:TRUE
  isset:FALSE
  empty:TRUE
  
  空の配列
  is_null:FALSE
  isset:TRUE
  empty:TRUE
  
  未初期化
  is_null:TRUE
  isset:FALSE
  empty:TRUE



is_null()とisset()は逆になるみたいですね。
大部分は直感的に理解しやすいと思いますが、
注意すべきは「0(数字のゼロ)」の扱い(--)b
empty()さんは「0(数字のゼロ)」を空と判断します。
つまりempty(0)はtrueね。
例えば未入力チェックをやりたいときに

  if(empty($hoge)) {
      print "未入力";
  }


とか書いちゃうと「0(数字のゼロ)」を入力しても
未入力扱いになっちゃうので要注意(--)b

おまけでもうちょっと発想を飛躍させると
これがtrueになることも分かると思いますφ(--)

  if("" == 0){
      print "何故か一緒だよー";
  }


えーでもさー、未入力チェックしたいし「0(数字のゼロ)」は
入力扱いにしたいんだけどどーすりゃいーの?
と思うこともあるかと思います。
そんなときに活躍するのがこいつ(--)σ「===(イコール三つ)」
「===(イコール三つ)」は型を含めて比較してくれる
目立たないけど頑張り屋さんな奴なのです。
ゼロを拾いたい時は

  if($hoge === 0){
      print "ゼロだよー";
  }


とか書けば良いし、未入力チェックも……
まぁ未入力チェックの仕方はいろいろありますが
横着したいならこんな書き方でも多分OKφ(--)

  if(empty($hoge) && ($hoge !== 0)) {
      print "未入力";
  }



この手の処理はゼロが絡むとバグりやすいので注意して下さいね。
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事