PHP代码重构

  1. 1. 删除 else
  2. 2. 拆分为多个函数
  3. 3. 多层 if 嵌套的语法,把他写成线性的,就像写规则一样将其一条条罗列出来
  • 总结
  • 删除 else

    1
    2
    3
    4
    5
    6
    7
    8
    function test($arg)
    {
    if($arg == 'foobar'){
    return true;
    }else{
    return false;
    }
    }

    更好的写法

    1
    2
    3
    4
    5
    6
    7
    8
    function test($arg)
    {
    if($arg == 'foobar'){
    return true;
    }
    return false;
    }

    拆分为多个函数

    这种方式需要将函数名取的尽量清晰易懂,不要嫌长。

    1
    2
    3
    4
    5
    6
    7
    8
    if($age > 18){
    doSomeThingA();
    doSomeThingB();
    doSomeThingC();
    }else{
    doSomeThingD();
    doSomeThingE();
    }

    多层 if 嵌套的语法,把他写成线性的,就像写规则一样将其一条条罗列出来

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function match($age, $salary, $pretty){
    if($age > 18){
    // do some thing A;
    if($salary > 5000){
    // do some thing B;
    if($pretty == true){
    return true;
    }
    }
    }
    return false;
    }

    改写成这样

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function match($age, $salary, $pretty){
    if($age < 18){
    return false;
    }
    // do some thing A;
    if($salary < 5000){
    return false;
    }
    // do some thing B;
    return $pretty == true;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function contry_initial($country){
    if ($country==="China" ){
    return "CHN";
    }else if($country==="America"){
    return "USA";
    }else if($country==="Japna"){
    return "JPN";
    }else{
    return "OTHER";
    }
    }

    更好的写法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function contry_initial($country){
    $countryList=[
    "China"=> "CHN",
    "America"=> "USA",
    "Japna"=> "JPN",
    ];
    // 也可以:array_key_exists($country, $countryList)
    if(in_array($country, array_keys($countryList))) {
    return $countryList[$country];
    }
    return "Other";
    }

    如果需要更加自由的定义映射表的话,可以这样写

    1
    2
    3
    4
    5
    6
    function contry_initial($country, array $countryList){
    if(in_array($country, array_keys($countryList))) {
    return $countryList[$country];
    }
    return "Other";
    }

    完全去掉if语句可以写成

    1
    2
    3
    function contry_initial($country, array $countryList){
    return in_array($country, array_keys($countryList))?$countryList[$country]:"Other";
    }

    最好的写法

    1
    2
    3
    4
    5
    6
    7
    8
    function contry_initial($country){
    $countryList=[
    "China"=> "CHN",
    "America"=> "USA",
    "Japna"=> "JPN",
    ];
    return isset($countryList[$country]) ? $countryList[$country] : "Other";
    }

    总结

    • return能越早越好,少用 else 提前中断(return)
    • if else 语句越少越好,可以用condition?a:b 表达的,就不要用if else
    • 有一一对应关系的,使用映射表。