2010-06-04 51 views
1

你好我試圖從移動過程編程路程,同時對設計模式有更好的理解。我想知道什麼設計模式可以最好地代表下面的代碼。這是一個if else語句,基本上是根據一天中的時間輸出一個值。這只是我在代碼中的幾個if/else if語句的示例。哪種OOP模式適合(迭代器,單例,工廠..)?PHP OOP編程 - 如何申請

if($dayval == "Sun" && $date >= 0 && $date < 18) { 
    $timemax = 18; 
    $timeleft = ($timemax - $date); 
    if($timeleft == 1) { 
     $arr = array('tstatus' => 'Trading begins today at 6:00pm (less than '. $timeleft. ' hour to go) - have a great trade week!', 
        'tcode' => 'closed');       
    } 
    else { 
     $arr = array('tstatus' => 'Trading begins today at 6:00pm (less than ' .$timeleft. ' hours to go) - have a great trade week!', 
        'tcode' => 'closed'      
     );   
    } 
    echo json_encode($arr); 
} 

else if($dayval == "Sun" && $date >= 18 && $date < 19) { 
    $timemax = 19; 
    $timeleft = ($timemax - $date); 
    if($timeleft == 1) { 
     $arr = array('tstatus' => 'Asian Market opening in less than ' .$timeleft. ' hour', 
        'tcode' => 'closed');       
    } 
    else { 
     $arr = array('tstatus' => 'Asian Market opening in less than ' .$timeleft. ' hours', 
        'tcode' => 'closed'      
     );   
    } 
    echo json_encode($arr); 
+1

OOP不會取代'if ... else'。代碼當然可以被改進,但是如何將它應用到OOP中取決於這個代碼片段如何適用於系統的其他部分,以及它應該如何重用。 – deceze 2010-06-04 01:39:20

+0

該代碼只會在基本顯示國家指標的地圖小部件上使用一次。 ajax會調用這段代碼,以便根據時間顯示相應的指標 – neitony 2010-06-04 11:53:34

回答

3

我不知道你是否需要應用任何特定的設計模式。只有在您嘗試解決特定問題時才應使用設計模式,並且設計模式滿足您的需求。我不認爲你在這裏有這樣的問題 - 我認爲你的代碼工作正常,在這種情況下,你可以像這樣離開它。

對象面向編程是不是應用設計模式來一切 - 多少你的代碼仍然會同樣寫到你的程序的風格,但它會面向周圍的物體

也就是說,我認爲有一點空間讓我們改善這裏。你重複的代碼公平一點這裏只是寫小時 /小時

我會重構,要看上去就像這樣:

$timeleft = ($timemax - $date); 
$arr = array('tstatus' => 'Trading begins today at 6:00pm (less than '. $timeleft. ' hour' . ($timeleft == 1) ? '' : 's' . ' to go) - have a great trade week!', 
       'tcode' => 'closed'      
    );   

這將增加「S」只有在需要它,而不要重複你的代碼太多。

+0

謝謝,您已經清理了很多,而您是對的,我可以將三元條件添加到代碼中。萬分感激! – neitony 2010-06-04 11:50:13