php开发中的一些经验整理

大概从类型、规范总结了一些经验,主要如下:

  1. php中的0不要随便使用,当定义状态的时候,最好跳过0,使用-1、1、2 php是一个弱类型的语言,所以我们开发时可以不在乎变量的类型,这极大的增加了我们的开发速度,但是也带来了一些其他的困扰,例如:in_array这个方法,如果我这样使用:

    $r = in_array("a", [0]);
    

    上面的代码会返回什么呢?很多人可能会说返回false,但实际返回的确实true,因为in_array自动将"a"进行了强制类型转换变成了0,当然数组第一个值就是0,所以返回了true

    这只是个简单的例子,当然还有if ("a"==0) {}这样的奇葩结果,所以警惕0

  2. 当有很多的分支条件时,尽量先处理错误的情况,例如:

    if (!empty($_POST['username])) {
        if (!empty($_POST['pssword'])) {
            if (!empty($_POST['email'])) {
                // do something
            }
        }
    }
    

    这个完全可以改写成:

    if (empty($_POST['username'])) {
        return false;
    }
    if (empty($_POST['pssword'])) {
        return false;
    }
    if (empty($_POST['email'])) {
        return false;
    }
    // do somethings
    

    这样可以尽量减少嵌套,让代码逻辑更清晰

  3. 不要出现if ($var = sum()) {}这样的写法,虽然这种写法可能执行结果也是对的(因为php里$var=sum()也是一个表达式,它有返回值),但是这样写却面临另一个问题:如果我们需要的仅仅是比较,而不是赋值+比较,那么这种写法就无法识别手误,给最后的DEBUG带来重重困难,尤其是后续的维护者。 这个对其他语言一样适用

  4. 返回值尽量一致,不要一个分支返回string,另外一个分支返回array,这样会给调用者带来苦恼

  5. 如果你的业务要求严谨的逻辑,那么请使用参数类型限定,例如:

    function foo(array $param) {}
    
    function boo(FooClass $param) {}
    

    上面的两个方法都都限定了参数的类型,foo方法要求参数是一个数组,boo方法要求参数是一个FooClass的实例,如果传入了其他类型的参数,就会导致一个致命错误,当然由于PHP类型问题,不能限定基本类型如:int\string\boolean等

  6. 尽量参考PSR规范来书写代码

Published: June 12 2014

blog comments powered by Disqus