PHP 基础:比较、If、Switch

| 选择喜欢的代码风格  
<?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 条件判断


在函数或类方法中使用“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 语句


Switch 判断是个不错的结构,但用的时候,有几个坑需要注意:

  • Switch 只比较数值,而不比较类型,记得上面说的例子吗? (对,等同于 ‘==’)
  • Switch 里的Case会一个个的去比较,直到找到匹配为止。 如果未找到匹配项,则使用默认值(如果已定义 default)
  • 如果没有 ‘break’, 会不停的继续,直到遇到 break 才返回
  • 在函数中,使用'return'可以直接返回,不会一直去找到 'break' 才停止

上面说的可能有点拗口,还是直接上代码解释:

<?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中比较 0、false、null 和 '' 的坑


除非你真的知道你在用==比较什么,一般情况用===更安全。

测试代码:

<?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";
}


发表评论