Last Update 2012-04-09
変数が null や "" の場合に、if文や、empty()、 isset() などの関数で、どのような結果を返すかを調べてみました。
以下はWindowsXP、 PHP 5.2.8 で試した結果で、間違いそうなところを赤色にしています。
> php -f test_empty.php $a = null empty($a) => true isset($a) => false is_null($a) => true is_array($a) => false if ($a == "") => true if ($a === "") => false if ($a == null) => true if ($a === null) => true $a = "" empty($a) => true isset($a) => true is_null($a) => false is_array($a) => false if ($a == "") => true if ($a === "") => true if ($a == null) => true if ($a === null) => false $a = " " empty($a) => false isset($a) => true is_null($a) => false is_array($a) => false if ($a == "") => false if ($a === "") => false if ($a == null) => false if ($a === null) => false $a = Array() empty($a) => true isset($a) => true is_null($a) => false is_array($a) => true if ($a == "") => false if ($a === "") => false if ($a == null) => true if ($a === null) => false $a = Array("") empty($a) => false isset($a) => true is_null($a) => false is_array($a) => true if ($a == "") => false if ($a === "") => false if ($a == null) => false if ($a === null) => false $ar = Array("a" => "AA", "b" => "", "c" => null) array_key_exists("b", $a) => true isset($ar["b"]) => true empty($ar["b"]) => true array_key_exists("c", $a) => true isset($ar["c"]) => false empty($ar["c"]) => true array_key_exists("e", $a) => false isset($ar["e"]) => false empty($ar["e"]) => true
テストに使用したプログラムのソースです。
<?php
class EmptyTest {
private $needBr = false;
// テスト処理
public function test() {
$this->testNull();
$this->testKara();
$this->testSpace();
$this->testEmptyArray();
$this->testArray();
}
private function println($s) {
if ($this->needBr) {
echo $s . "<br />\n";
} else {
echo $s . "\n";
}
}
// true をセットすると、 println() で<br />
// を付けて出力する
public function setNeedBr($b) {
$needBr = $b;
}
private function testNull() {
$this->println('$a = null');
$a = null;
$this->printTestVar($a);
$this->println('');
}
private function testKara() {
$this->println('$a = ""');
$a = '';
$this->printTestVar($a);
$this->println('');
}
private function testSpace() {
$this->println('$a = " "');
$a = " ";
$this->printTestVar($a);
$this->println('');
}
private function testEmptyArray() {
$this->println('$a = Array()');
$a = Array();
$this->printTestVar($a);
$this->println('');
$this->println('$a = Array("")');
$a = Array("");
$this->printTestVar($a);
$this->println('');
}
private function testArray() {
$this->println('$ar = Array("a" => "AA", "b" => "", "c" => null)');
$ar["a"] = "AA";
$ar["b"] = "";
$ar["c"] = null;
$this->printTestArray($ar, "b");
$this->println("");
$this->printTestArray($ar, "c");
$this->println("");
$this->printTestArray($ar, "e");
$this->println("");
}
private function printTestVar($a) {
if (empty($a)) {
$this->println('empty($a) => true');
} else {
$this->println('empty($a) => false');
}
if (isset($a)) {
$this->println('isset($a) => true');
} else {
$this->println('isset($a) => false');
}
if (is_null($a)) {
$this->println('is_null($a) => true');
} else {
$this->println('is_null($a) => false');
}
if (is_array($a)) {
$this->println('is_array($a) => true');
} else {
$this->println('is_array($a) => false');
}
if ($a == "") {
$this->println('if ($a == "") => true');
} else {
$this->println('if ($a == "") => false');
}
if ($a === "") {
$this->println('if ($a === "") => true');
} else {
$this->println('if ($a === "") => false');
}
if ($a == null) {
$this->println('if ($a == null) => true');
} else {
$this->println('if ($a == null) => false');
}
if ($a === null) {
$this->println('if ($a === null) => true');
} else {
$this->println('if ($a === null) => false');
}
}
private function printTestArray($ar, $keyName) {
if (is_array($ar) != true) {
$this->println("invalid array");
var_dump($ar);
}
if (array_key_exists($keyName, $ar)) {
$this->println('array_key_exists("' . $keyName . '", $a) => true');
} else {
$this->println('array_key_exists("' . $keyName . '", $a) => false');
}
if (isset($ar[$keyName])) {
$this->println('isset($ar["' . $keyName . '"]) => true');
} else {
$this->println('isset($ar["' . $keyName . '"]) => false');
}
if (empty($ar[$keyName])) {
$this->println('empty($ar["' . $keyName . '"]) => true');
} else {
$this->println('empty($ar["' . $keyName . '"]) => false');
}
}
}
$obj = new EmptyTest();
$obj->test();