2010-04-24 5 views
6

J'essaye de raccourcir mon code en utilisant l'opérateur ternaire.Comment utiliser l'opérateur ternaire au lieu de if-else dans PHP

Ceci est mon code d'origine:

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

Comment puis-je utiliser l'opérateur ternaire dans mon code au lieu de if de/s else de?

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

Voici le code que j'ai essayé, mais ne sais pas comment ajouter une « elseif partie » à elle.

+1

Vous n'avez pas besoin de changer votre code, il est parfaitement lisible et bien. – SilentGhost

+0

duplicata possible de [Quel style de codage utilisez-vous pour l'opérateur ternaire?] (Http://stackoverflow.com/questions/243217/which-coding-style-you-use-for-ternary-operator) – outis

Répondre

14

Ceci est appelé l'opérateur ternaire ;-)

Vous pouvez utiliser deux de ces:

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

Cela peut être lu comme:

  • si $type est 'recent'
  • puis utilisez 'sid DESC'
  • autre
    • si $type est 'pop'
    • puis utilisez 'counter DESC'
    • utiliser autre 'RAND()'


Quelques notes:

  • Vous devez utiliser == ou ===; et non =
  • Il est préférable d'utiliser (), pour rendre les choses plus faciles à lire
    • Et vous shouldn N'utilisez pas trop d'opérateurs ternaires comme ça: ça rend le code un peu difficile à comprendre, je pense


Et, comme une référence au sujet de l'opérateur ternaire, citant le Operators section of the PHP manual:

Le troisième groupe est le ternaire opérateur: ?:.
Il doit être utilisé pour sélectionner entre deux expressions en fonction d'un troisième, plutôt que pour sélectionner deux phrases ou chemins d'exécution .
Entourant ternaire des expressions avec des parenthèses est une très bonne idée.

3

Je suggérerais plutôt d'utiliser une instruction case. il est un peu plus lisible mais plus maintenable lorsque vous voulez ajouter des options supplémentaires

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

La question concerne le ternaire opérateurs, mais je suis d'accord, dans ce cas, le commutateur a beaucoup plus de sens. – luminarious

+2

Eh bien, la question est de "raccourcir ou mieux" - moins de lignes ne sont pas toujours == mieux; J'aime les opérateurs ternaires mais parfois ils ne sont pas la bonne chose à utiliser. – Mauro

Questions connexes