2017-07-12 3 views
0

Ich arbeite mit Opencart und ich habe diese Funktionen in meiner Modelldatei, die im Wesentlichen die gleiche Sache sind. Gibt es einen besseren Weg, dies zu tun? Es scheint eine Verschwendung zu sein, immer wieder Codezeilen zu wiederholen, aber ich bin nicht sicher, was der richtige Umgang damit ist. Kann ich diese Aussagen irgendwie kombinieren? Ist das ein richtiger Weg, dies zu tun? Meine PHP-Kenntnisse sind nicht ganz da und einige Ratschläge würden mir gefallen. Hier sind die FunktionenKorrekte Art, Modellfunktionen zu kombinieren

public function getSum() { 
      $query = $this->db->query("SELECT SUM(amount) as amount_sum FROM " . DB_PREFIX . "donate Where date_added >= (CURDATE() - INTERVAL 12 MONTH) ");   
      return $query->row; 
    } 
     public function lastThirty() { 
      $query = $this->db->query("SELECT SUM(amount) as amount_sum FROM " . DB_PREFIX . "donate Where date_added >= (CURDATE() - INTERVAL 1 MONTH)");    
      return $query->row; 
    } 
public function lastYearNow() { 
      $query = $this->db->query("SELECT SUM(amount) as amount_sum FROM " . DB_PREFIX . "donate Where date_added >= (CURDATE() - INTERVAL 12 MONTH) ");   
      return $query->row; //will be giving this time last year, not figured out yet. 
    } 
     public function lastYearTotal() { 
      $query = $this->db->query("SELECT SUM(amount) as amount_sum FROM " . DB_PREFIX . "donate Where date_added >= (CURDATE() - INTERVAL 1 MONTH)");    
      return $query->row; //will be total for last last year, not figured out yet. 
    } 
+1

Ich würde das nicht tun. Das sind kleine Methoden - es ist nicht so, als würde eine Menge Code kopiert werden. Möglicherweise müssen Sie sie in der Zukunft optimieren (sagen Sie, getSum() sollte bestimmte Transaktionen zum Beispiel ausschließen), und es wird ein Schmerz sein, wenn Sie sie kombiniert haben. –

+0

Cool danke! Ich scheine immer den langen Weg zu gehen, und manchmal gibt es eine Abkürzung, von der ich nichts weiß. –

+0

Wenn es * Logik * in diesen Funktionen gäbe, würde ich sicher sagen [es austrocknen] (https://en.wikipedia.org/wiki/Don%27t_repeat_yourself), aber das sind nur triviale Funktionen. –

Antwort

1

Sie können eine einzige Funktion anstelle von vier verwenden und einen Parameter für den dynamischen Wert, z. B. den Monat, verwenden. So wird Ihre Methode wie folgt aussehen:

public function getSum($month = 12) { 
    $query = $this->db->query("SELECT SUM(amount) as amount_sum FROM " . DB_PREFIX . "donate Where date_added >= (CURDATE() - INTERVAL " . $month . " MONTH) ");   
    return $query->row; 
} 

Und während dieser Methode aufrufen können Sie übergeben Sie für die Anzahl der Monate wollen führen oder es wird das Ergebnis für 12 Monate zeigen. Hoffe das wird dir helfen.

Hinweis: Es ist ratsam, alle diese Methoden zu behalten, da diese eine kleine Menge Code enthalten und in der Funktion möglicherweise andere Methoden erforderlich sind, um andere Operationen auszuführen.

1

Sie können den doppelten Code in eine Methode extrahieren und nur geben Anzahl der Monate (wenn dies den einzigen Unterschied ist) als Argument. Ich würde jedoch alle anderen Methoden wegen der Ausführlichkeit behalten.

Verwandte Themen