bool値を返す各種PHPの関数の挙動を自分のメモがてら表にまとめました。下記スクリプトで確認しています。
確認用スクリプト
is_null_table.php
<?php
class MyClass{
function __construct(){
}
}
$sample = array(
'null' => null
, 'true' => true
, 'false' => false
, '""' => ''
, '"hoge"' => 'hoge'
, '0' => 0
, '1' => 1
, '-1' => -1
, 'array()' => array()
, 'array(0)' => array(0)
, 'array(0, 1)' => array(0, 1)
, 'array("k" => null)' => array('k' => null)
, 'array("k" => "v")' => array('k' => 'v')
, 'MyClass' => new MyClass
, 'function(){}' => function(){}
, 'function($a){echo $a;}' => function($a){echo $a;}
);
function output_row(){
$width = 23;
$separate = '|';
$cols = func_get_args();
$line = $separate;
foreach ($cols as $value) {
$space = str_repeat(' ', $width - strlen($value));
$line .= $value . $space . $separate;
}
echo $line . PHP_EOL;
}
function str_true($value){
return $value ? 'TRUE' : 'FALSE';
}
echo PHP_EOL;
echo '** True / False Table ** (PHP version ' . phpversion() . ')' . PHP_EOL . PHP_EOL;
output_row('value', 'bool', 'is_null()', 'empty()', 'isset()');
output_row('-----', '-----', '-----', '-----', '-----');
foreach ($sample as $key => $value) {
$is_true = str_true($value);
$is_null = str_true(is_null($value));
$is_empty = str_true(empty($value));
$is_set = str_true(isset($value));
output_row($key, $is_true, $is_null, $is_empty, $is_set);
}
echo PHP_EOL;
exit(0);
?>
結果出力
結果は以下の通り。
result.txt
** True / False Table ** (PHP version 5.5.31)
|value |bool |is_null() |empty() |isset() |
|----- |----- |----- |----- |----- |
|null |FALSE |TRUE |TRUE |FALSE |
|true |TRUE |FALSE |FALSE |TRUE |
|false |FALSE |FALSE |TRUE |TRUE |
|"" |FALSE |FALSE |TRUE |TRUE |
|"hoge" |TRUE |FALSE |FALSE |TRUE |
|0 |FALSE |FALSE |TRUE |TRUE |
|1 |TRUE |FALSE |FALSE |TRUE |
|-1 |TRUE |FALSE |FALSE |TRUE |
|array() |FALSE |FALSE |TRUE |TRUE |
|array(0) |TRUE |FALSE |FALSE |TRUE |
|array(0, 1) |TRUE |FALSE |FALSE |TRUE |
|array("k" => null) |TRUE |FALSE |FALSE |TRUE |
|array("k" => "v") |TRUE |FALSE |FALSE |TRUE |
|MyClass |TRUE |FALSE |FALSE |TRUE |
|function(){} |TRUE |FALSE |FALSE |TRUE |
|function($a){echo $a;} |TRUE |FALSE |FALSE |TRUE |
ちょっと考察
is_null()
は値がnull
のときだけtrue
で、isset()
はその否定になっているみたいですね。一方、empty()
はbool
評価の否定になっている模様。
以上です。