簡體   English   中英

重構簡單功能

[英]Refactoring simple function

我需要以人類可讀的格式顯示當前記錄的狀態。 在我的數據庫中,我對此字段有一個整數,因此記錄的狀態可能為1、2、3、4等

我寫了一些代碼向用戶顯示當前狀態:

<?php 
// code to retrieve current status from DB
// ...


if ($status == '1') {
    echo "Current status: Active";
}
if ($status == '2') {
    echo "Current status: Pending";
}
    if ($status == '3') {
    echo "Current status: Inactive";
}

// etc..

?>

這段代碼看起來很丑陋,但是我無法弄清楚如何重構它以使其更有效並且沒有無限的條件條件。

制作一個數組:

$statvalue=array(1=>'Active',2=>'Pending',3=>'Inactive');
echo("Current status: {$statvalue[$status]}");

最好用數組解決:

function foo($status) {
    $strings = array(
        '1' => "Current status: Active",
        '2' => "Current status: Pending";
        '3' => "Current status: Inactive";
    );

    return $strings[$status];
}

語法要短得多,您可以在以后通過向數組添加鍵來擴展它。

嘗試Switch語句

switch($status){
  case '1':
   echo "Current status: Active";
   break;

  case '2':
    echo "Current status: Pending";
    break;

 case '3':
    echo "Current status: Inactive";
   break;
 default:
   echo "i is not equal to  1,2 or 3";
}

因為刪除了。 更好的方法將是JamWaffles的答案

您可以創建一個引用狀態的數組:

<?php
$status_cases = ['active', 'pending', 'inactive'];

echo "Current status: ". $status_cases[$status - 1];

您可以采取許多措施來改善這一點。

首先,許多開發人員更喜歡編寫具有常量值的比較,如下所示:

if ('1' == $status) {

這使得意外使用賦值運算符(“ =”)而不是相等運算符(“ ==”)變得更加困難,這往往會產生有趣的錯誤。

其次,正如MortenSickel和Thomas Ruiz所寫,用查找替換這種語句是一個好主意。 MortenSickel的答案更好,因為這意味着您可以在數組中留出空隙,而不必將數組填充與任意整數位置進行協調-明確表示總是更好。

但是,我的建議是將狀態描述放入數據庫中-可能在多個地方都需要此信息(填充數據庫的代碼,讀取數據庫的代碼,報告等),並在各個位置進行協調多個代碼位置聽起來是個壞主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM