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は便利な組み込み関数が多数用意されている分、
その実行結果の違いもきちんと意識して使い分けたいものです。


