2010-04-24 11 views
6

Sto cercando di abbreviare il mio codice utilizzando l'operatore ternario.Come utilizzare l'operatore ternario invece di if-else in PHP

Questo è il mio codice originale:

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

Come posso usare l'operatore ternario nel mio codice, invece di if s/s else?

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

Questo è il codice che ho provato, ma non hanno alcuna idea di come aggiungere un “elseif parte” ad esso.

+1

non è necessario modificare il codice, è perfettamente leggibile e soddisfacente. – SilentGhost

+0

possibile duplicato di [Quale stile di codifica si utilizza per l'operatore ternario?] (Http://stackoverflow.com/questions/243217/which-coding-style-you-use-for-ternary-operator) – outis

risposta

14

questo è chiamato l'operatore ternario ;-)

Si potrebbe utilizzare due di questi:

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

Questo può essere letto come:

  • se $type è 'recent'
  • quindi utilizzare 'sid DESC'
  • altro
    • se $type è 'pop'
    • quindi utilizzare 'counter DESC'
    • altro utilizzare 'RAND()'


Un paio di note:

  • È necessario utilizzare == o ===; e non =
  • E 'meglio usare (), per rendere le cose più facili da leggere
    • E si shouldn Usiamo troppi operatori ternari del genere: rende il codice un po 'difficile da capire, penso che


E, come riferimento circa l'operatore ternario, citando il Operators section of the PHP manual:

Il terzo gruppo è il ternario esercente: ?:.
Dovrebbe essere utilizzato per selezionare tra due espressioni a seconda di una terza, anziché per selezionare due frasi o percorsi di esecuzione .
ternario circostante espressioni con parentesi è una buona idea .

3

Suggerirei invece di utilizzare una dichiarazione caso. lo rende un po 'più leggibile ma più manutenibile per quando si desidera aggiungere ulteriori opzioni

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

La domanda riguarda ternario operatori, ma sono d'accordo, in questo caso, l'interruttore ha molto più senso. – luminarious

+2

Ah bene, la domanda è "accorciare o meglio" - meno linee non sempre == meglio; Mi piacciono gli operatori ternari ma a volte non sono proprio la cosa giusta da usare. – Mauro

Problemi correlati