in
PHP
- 22 11月, 2013
PHPの変数の空判定について
PHPで、実行結果が紛らわしい以下の式を比較してみました。
- (bool) $var
- isset($var)
- empty($var)
- is_null($var)
サンプルコード
<?php class testClass { public static function testFunc($var) { echo("----------\n"); echo('$var = ' . var_export($var, true) . "\n"); echo('(bool) $var = ' . var_export((bool) $var, true) . "\n"); echo('isset($var) = ' . var_export(isset($var), true) . "\n"); echo('empty($var) = ' . var_export(empty($var), true) . "\n"); echo('is_null($var) = ' . var_export(is_null($var), true) . "\n"); } } $var; testClass::testFunc($var); $var = NULL; testClass::testFunc($var); $var = FALSE; testClass::testFunc($var); $var = 0; testClass::testFunc($var); $var = ""; testClass::testFunc($var); $var = "0"; testClass::testFunc($var); $var = array(); testClass::testFunc($var); $var = 1; testClass::testFunc($var);
実行結果
PHP Notice: Undefined variable: var in *** on line 17 ---------- $var = NULL (bool) $var = false isset($var) = false empty($var) = true is_null($var) = true ---------- $var = NULL (bool) $var = false isset($var) = false empty($var) = true is_null($var) = true ---------- $var = false (bool) $var = false isset($var) = true empty($var) = true is_null($var) = false ---------- $var = 0 (bool) $var = false isset($var) = true empty($var) = true is_null($var) = false ---------- $var = '' (bool) $var = false isset($var) = true empty($var) = true is_null($var) = false ---------- $var = '0' (bool) $var = false isset($var) = true empty($var) = true is_null($var) = false ---------- $var = array ( ) (bool) $var = false isset($var) = true empty($var) = true is_null($var) = false ---------- $var = 1 (bool) $var = true isset($var) = true empty($var) = false is_null($var) = false
実行結果の表
(bool) $var | empty($var) | isset($var) | is_null($var) | |
$var; | FALSE | TRUE | FALSE | TRUE |
$var = NULL; | FALSE | TRUE | FALSE | TRUE |
$var = FALSE; | FALSE | TRUE | FALSE | TRUE |
$var = 0; | FALSE | TRUE | TRUE | FALSE |
$var = “”; | FALSE | TRUE | TRUE | FALSE |
$var = “0”; | FALSE | TRUE | TRUE | FALSE |
$var = array(); | FALSE | TRUE | TRUE | FALSE |
$var = 1; | TRUE | FALSE | TRUE | FALSE |
表によれば、
「(bool) $var」と「empty($var)」、「isset($var)」と「is_null($var)」の実行結果が対応している(真偽が逆になっている)ようです。
また、頭が「is」で始まる後者2つの関数は、前者2つに比べてより厳密な比較がされています。
PHPは便利な組み込み関数が多数用意されている分、
その実行結果の違いもきちんと意識して使い分けたいものです。