Ist das ein schlechtes Muster? (Wechseln Sie nach / foreach Schleife)

7

Ich schreibe Code wie:

%Vor%

Gibt es einen besseren Weg, dies zu tun? Scheint dreckig für mich, aber vielleicht bin ich gerade dabei, darüber nachzudenken.

Die einzige andere Alternative, an die ich denken kann, ist eine if-Anweisung für jeden Schlüssel, die nicht besser aussieht. I.e. :

%Vor%

(oder so ähnlich)

Ich kann bei Bedarf genauen Code posten, aber dies ist der allgemeine Überblick darüber, was passiert. Bitte kritisieren Sie, aber denken Sie daran, dass ich hier Hilfe suche. Also, wenn ich etwas ungeheuer falsch mache, dann zeig es dir.

    
Magic Hat 31.10.2009, 01:22
quelle

6 Antworten

15

Das Zuordnen von Funktionen zu Schlüsseln in einem Wörterbuch / assoziativen Array ist ein gängiger Ansatz für diese Situation (wie @jldupont erwähnt hat) - nicht nur in PHP, sondern in vielen dynamischen Sprachen mit assoziativen Arrays. Zum Beispiel haben Python und Lua nicht einmal eine Switch-Anweisung - das ist so ziemlich die einzige Möglichkeit, einen Switch zu emulieren.

Betrachten Sie diesen Ansatz:

%Vor%

Ausgabe:

%Vor%

Es ist Overkill, wenn Sie nur zwei verschiedene Werte haben, aber offensichtlich wird es ein lohnender Ansatz, da die Anzahl der Situationen, die Sie abdecken müssen, zunimmt.

    
Mark Rushakoff 31.10.2009, 01:36
quelle
5

Es ist keine "schlechte" Lösung, aber wie immer gibt es Alternativen. Zum Beispiel könnten Sie die switch-Anweisung loswerden und einen interpretierten Handler für die Strings verwenden. Dies ähnelt einer Liste von Funktionszeigern, aber Sie müssen eine Liste nicht auf dem neuesten Stand halten, um neues Verhalten hinzuzufügen. Das Hinzufügen der neuen Funktion zum Handler wird dafür sorgen.

%Vor%

Sie werden wahrscheinlich Code benötigen, um die Eingabezeichenfolgen zu bereinigen und sicherzustellen, dass die Methode in Ihrem Handler vorhanden ist, aber dies könnte Ihnen einige Ideen geben.

    
jheddings 31.10.2009 01:36
quelle
4

Ich neige dazu, den Schalter in der foreach-Schleife zu verwenden. IMHO ist weniger schmutzig als eine Menge von if.

Sie können Ihren Schalter in eine andere Funktion stellen, wie:

%Vor%     
Nettogrof 31.10.2009 01:25
quelle
1

Es gibt (mindestens) eine andere Möglichkeit: Verwenden Sie eine Wörterbuchsuche, um Arbeit an eine Funktion zu senden.

Suchen Sie die Funktion mit der Taste $ als "Schlüssel", rufen Sie die Funktionsreferenz ab und wenden Sie sie mit $ value als Parameter an.

Verzeih mir, aber mein PHP-Fu ist ein bisschen eingerostet.

    
jldupont 31.10.2009 01:26
quelle
0

Versuchen Sie Folgendes:

Führen Sie jede Version - mit dem Schalter und mit dem - eine Million Mal durch. Zeit jeden Lauf.

Lass uns wissen, welcher schneller ist.

    
inked 31.10.2009 01:26
quelle
0

Damit ist nichts verkehrt.

Wenn Sie nur zwei oder drei Elemente haben, würde ich mit dem, wenn nur wegen der Komplexität des Codes gehen. Wenn Sie mehr als 5 haben, würde ich auf jeden Fall mit dem Schalter gehen ...

    
DOOManiac 31.10.2009 01:35
quelle

Tags und Links