<?php $a = 5; // 5 是个整型 integer var_dump($a == 5); // 比较数值; 返回 true var_dump($a == '5'); // 比较数值; (忽略类型); 返回 true var_dump($a === 5); // 比较类型/数值; (整型 vs. 整型); 返回 true var_dump($a === '5'); // 比较类型/数值; (整型 vs. 字符串); 返回 false! //Equality comparisons if (strpos('testing', 'test')) { // 'test' 在位置 0 找到, 而 0 在布尔类型里被解释成了 'false' // code... } // vs. 严格比较 if (strpos('testing', 'test') !== false) { // (0 !== false), 用 === 严格比较,返回true // code... }
在PHP中运用比较运算符,经常容易被大家被忽视一些问题,经常导致许多意想不到的结果。 其中一个问题源于严格的比较(将布尔值作为整数进行比较),撸代码说明:
推荐在PHP官网中更多阅读:
在函数或类方法中使用“if / else”语句时,有一种常见的误解,即“else”必须结合使用。 实际上,如果结果是定义返回值,'else'不是必需的,因为'return'将结束该函数,即便写虽然没错,但导致'else'变得没有更多的实际意义,比如:
<?php function test($a) { if ($a) { return true; } else { return false; } } // vs. function test($a) { if ($a) { return true; } return false; // else 在这里并不需要了 } // 简写可以这样: function test($a) { return (bool) $a; }
推荐在PHP官网中更多阅读:
Switch 判断是个不错的结构,但用的时候,有几个坑需要注意:
上面说的可能有点拗口,还是直接上代码解释:
<?php $answer = test(2); // 将从 'case 2' 和 'case 3' 一直执行,因为case 2里没有break.. function test($a) { switch ($a) { case 1: // code... break; // break 用来停止 switch 结构 case 2: // code... // 如果没有 break, 将到下一个比较 'case 3' case 3: // code... return $result; // 在一个 function 函数里, 'return' 将直接结束返回 default: // code... return $error; } }
推荐更多阅读:
除非你真的知道你在用==比较什么,一般情况用===更安全。
测试代码:
<?php //test.php echo '0 == false: '; var_dump(0 == false); echo '0 === false: '; var_dump(0 === false); echo "\n"; echo '0 == null: '; var_dump(0 == null); echo '0 === null: '; var_dump(0 === null); echo "\n"; echo 'false == null: '; var_dump(false == null); echo 'false === null: '; var_dump(false === null); echo "\n"; echo '"0" == false: '; var_dump("0" == false); echo '"0" === false: '; var_dump("0" === false); echo "\n"; echo '"0" == null: '; var_dump("0" == null); echo '"0" === null: '; var_dump("0" === null); echo "\n"; echo '"" == false: '; var_dump("" == false); echo '"" === false: '; var_dump("" === false); echo "\n"; echo '"" == null: '; var_dump("" == null); echo '"" == null: '; var_dump("" === null);
测试结果:
→ php test.php 0 == false: bool(true) 0 === false: bool(false) 0 == null: bool(true) 0 === null: bool(false) false == null: bool(true) false === null: bool(false) "0" == false: bool(true) "0" === false: bool(false) "0" == null: bool(false) "0" === null: bool(false) "" == false: bool(true) "" === false: bool(false) "" == null: bool(true) "" == null: bool(false)
比如像 array_search
,没找到返回 false,找到了返回 key,而 key 是可能为 0 的:
<?php $test=array(100, 101, 102, 103); if($key=array_search(100, $test)){ echo $key; } else{ echo "Not found"; }