facebook twitter youtube
Salesforce Java Android PHP JavaScript MySQL Perl node.js HTML iOS
in PHP - 22 11月, 2013
by admin - no comments
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は便利な組み込み関数が多数用意されている分、
その実行結果の違いもきちんと意識して使い分けたいものです。