2010-04-24 1 views
6

Ich versuche, meinen Code mit dem ternären Operator zu verkürzen.So verwenden Sie den ternären Operator anstelle von if-else in PHP

Das ist mein Original-Code:

if ($type = "recent") { 
    $OrderType = "sid DESC"; 
} elseif ($type = "pop") { 
    $OrderType = "counter DESC"; 
} else { 
    $OrderType = "RAND()"; 
} 

Wie kann ich den ternären Operator in meinem Code verwenden, anstatt if s/else s?

$OrderType = ($type = "recent") ? "sid DESC" : "counter DESC" ; 

Dies ist der Code, den ich versuchte, aber habe keine Ahnung, wie man einen „elseif Teil“, um es hinzuzufügen.

+1

Sie müssen nicht Ihren Code ändern, es ist perfekt lesbar und gut. – SilentGhost

+0

mögliche Duplikate von [Welchen Codierungsstil verwenden Sie für ternären Operator?] (Http://stackoverflow.com/questions/243217/which-coding-style-you-use-for-ternary-operator) – outis

Antwort

14

Dies ist der ternäre Operator ;-)

genannt Sie zwei davon nutzen könnten:

Dies kann
$OrderType = ($type == 'recent' ? 'sid DESC' : ($type == 'pop' ? 'counter DESC' : 'RAND()')) 

gelesen werden als:

  • wenn $type'recent' ist

  • dann verwenden Sie 'sid DESC'
  • sonst
    • wenn $type ist 'pop'
    • dann verwenden 'counter DESC'
    • sonst 'RAND()' verwenden


Ein paar Anmerkungen:

  • Sie müssen == oder === verwenden; und nicht =
  • Es ist am besten () zu verwenden, um die Dinge einfacher
    • zu lesen und Sie shouldn benutze nicht zu viele ternäre Operatoren wie diese: es macht Code ein bisschen schwer zu verstehen, ich denke


Und als Referenz über den ternären Operator unter Angabe der Operators section of the PHP manual:

Die dritte Gruppe der ternäre Operator ist: ?:.
Es sollte verwendet werden, um zwischen zwei Ausdrücken abhängig von einem dritten anstelle von auszuwählen, um zwei Sätze oder Pfade von Ausführung auszuwählen.
Umliegende ternäre Ausdrücke mit Klammern ist eine sehr gute Idee.

3

Ich würde vorschlagen, stattdessen eine case-Anweisung zu verwenden. es macht es ein wenig lesbarer, aber besser wartbar, wenn Sie zusätzliche Optionen hinzufügen möchten

switch ($type) 
{ 
case "recent": 
    $OrderType = "sid DESC"; 
    break; 
case "pop": 
    $OrderType = "counter DESC"; 
    break; 
default: 
    $OrderType = "RAND()"; 
} 
+0

Die Frage bezieht sich auf ternäre Betreiber, aber ich stimme zu, in diesem Fall macht Switch viel mehr Sinn. – luminarious

+2

Naja, die Frage ist "kürzen oder besser" - weniger Linien sind nicht immer == besser; Ich mag ternäre Operatoren, aber manchmal sind sie einfach nicht das Richtige. – Mauro

Verwandte Themen