isset()およびempty()の返り値メモ

変数に値が入っているかどうかをチェックするのにはissetもしくはemptyを使う。両方とも似たような関数だけど動作は大きく異なるので、(少なくとも僕の場合)これらの関数を混同させたコードを書くのは非常に危険だ。

だもんで、ちょっとまとめてみる。

■コード


<?php

$data[0] = 'string'; #文字列
$data[1] = ''; #空文字列
$data[2] = '0'; # 文字列の0
$data[3] = 0; # 数値の0
$data[4] = false; # BOOL
$data[5] = null;

echo "<pre>";

foreach ($data as $key => $value) {
echo "array[{$key}]=";
var_dump($value);
echo "\n■isset■\n";
if (isset($value)) {
echo "「{$value}」がセットされています(true)";
} else {
echo "セットされていません(false)";
}

echo "\n■!empty■\n";
if (!empty($value)) {
echo "「{$value}」がセットされています(true)";
} else {
echo "セットされていません(false)";
}

echo "<hr>";

}

echo "</pre>";

?>

■結果


array[0]=string(6) "string"

■isset■
「string」がセットされています(true)
■!empty■
「string」がセットされています(true)
-----------------------------
array[1]=string(0) ""

■isset■
「」がセットされています(true)
■!empty■
セットされていません(false)
-----------------------------
array[2]=string(1) "0"

■isset■
「0」がセットされています(true)
■!empty■
セットされていません(false)
-----------------------------
array[3]=int(0)

■isset■
「0」がセットされています(true)
■!empty■
セットされていません(false)
-----------------------------
array[4]=bool(false)

■isset■
「」がセットされています(true)
■!empty■
セットされていません(false)
-----------------------------
array[5]=NULL

■isset■
セットされていません(false)
■!empty■
セットされていません(false)
-----------------------------

「空文字の''」と「数字の0」と「文字列の'0'」と「bool値」での返り値が大きく異なるのがわかる。emptyは広義での「false」を調べるのに対し、issetは狭義での「true」かどうかをチェックする感じだろうか。emptyを使うと潜在的なバグを含んでしまいそうで怖いなあ。

なもんで、変数に何か文字列が入ってる(空文字の''以外)のかどうかをチェックしたいのだったら

if (isset($param) && $param!='') {

}

変数に何か数値が入ってる(数値の0以外)のかどうかをチェックしたいのだったら

if (isset($param) && $param!=0) {

}

とか決めておいた方がよさそうだ。

トラックバック(0)

このブログ記事を参照しているブログ一覧: isset()およびempty()の返り値メモ

このブログ記事に対するトラックバックURL: http://monolog.spanstyle.com/mt/mt-tb.cgi/335

このサイトについて

自分用リンク

Powered by Movable Type 4.22-ja

PR

このブログ記事について

このページは、ishiiが2005年6月28日 04:19に書いたブログ記事です。

ひとつ前のブログ記事は「ONWARDへ買出しに」です。

次のブログ記事は「ファイルじゃなく、変数に入ってるSmartyテンプレートはどうやったら表示できる?」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

アイテム

  • swfobject.png
  • symfony.png
  • doclean.png
  • clean.png
  • twitterui.png
  • php5.2.8-warning.png
  • pagesaver.png
  • analytics.png
  • Munsell Hue Test.png
  • Munsell Hue Test0.png