如何编写更让人看懂的 PHP 代码

2,179 阅读1分钟
原文链接: github.com
   根据 《改善既有的代码-重构》将其中java代码改为PHP代码



      /**********我连变量名都是抄的************/

提炼函数1

原代码

  $post_name = $_POST['name'];
  if(isset($post_name) && !empty($post_name)){
    ......
  }

  $post_age = $_POST['age'];
  if(isset($post_name) && !empty($post_name)){
    ......
  }

重构后


  $post_name = $_POST['name'];
  if(isSetOrEmpty($post_name)){
    ......
  }
  $post_age = $_POST['age'];
  if(isSetOrEmpty($post_age)){
    ......
  }


  function isSetOrEmpty($value){
    if(isset($value) && !empty($value)){
      return true;
    }else{
      return false;
    }
  }

提炼函数2 清除不必要的注释

原代码

  function printOwing(){
    //print banner
    echo '**************************<br/>';
    echo 'Banner<br>';
    echo '**************************<br/>';
    //print details
    echo 'name:Lili';
    echo 'amount:'.getOutstanding();
  }

重构后

function printOwing(){
  printBanner();
  printDetails(getOutstanding());
}

function printBanner(){
  echo '**************************<br/>';
  echo 'Banner<br>';
  echo '**************************<br/>';
}

function printDetails($outstanding){
  echo 'name:Lili';
  echo 'amount:'.$outstanding;
}

将函数内联化

如果一个函数的逻辑太简单,则把其中的代码移到调用它的代码,取消这个函数

原代码

  function getRating(){
    return moreThanFiveLateDeliveres() ? 2 : 1;
  }
  function moreThanFiveLateDeliveres(){
    return $number > 5;
  }

重构后

  function getRating(){
    return ($number > 5) ? 2 : 1;
  }

将临时变量内联化

原代码

  $price = $order['price'];
  return $price > 1000; 

重构后

  return $order['price'] > 1000;

引入解释性变量

原代码

  if($_SESSION['is_login'] >=1 && $_SESSION['is_line'] >=1 && addLoginHistory() && $admin > 0){
      ......
    }

重构后

  $isLogin = $_SESSION['is_login'] >=1;
  $isLine = $_SESSION['is_line'] >=1;
  $isAdmin = $admin > 0;
  if($isLogin && $isLine && addLoginHistory() && $isAdmin){
      ......
  }

剖解临时变量

一个临时变量多次被赋值(不在循环中),应该针对每次赋值,创造独立的临时变量

原代码

  $temp = 2*($height + $width);
    echo $temp;

    $temp = $height + $width;
    echo $temp;

重构后

  $perimeter = 2*($height + $width);
    echo $perimeter;

    $area = $height + $width;
    echo $area;

以卫语句取代嵌套条件语句

原代码

  function getPayAmount(){
        $resoult = 0;
        if($isDead){
            $resoult = deadAmount();
        }else{
            if($isSeparated){
                $resoult = separatedAmount();
            }else{
                if($isRetired){
                    $resoult = retiredAmount();
                }else{
                    $resoult = normalPayAmount();
                }
            }
        }
        return $resoult;
    }

重构后

return 后面的语句将不会执行
  function getPayAmount(){
        if($isDead){
            return deadAmount();
        }
        if($isSeparated){
            return separatedAmount();
        }
        if($isRetired){
            return retiredAmount();
        }

        return normalPayAmount();
    }

未完待续......