2012.
10.
18
23:49:42
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 "未入力";
}
この手の処理はゼロが絡むとバグりやすいので注意して下さいね。
ゆるゆるだからこそ分かりにくいときもあったりします。
と言う訳で今日は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 "未入力";
}
この手の処理はゼロが絡むとバグりやすいので注意して下さいね。