Comment écrire un opérateur ternaire PHP
Comment écrire un opérateur ternaire PHP avec la portion elseif?
je vois des exemples de base avec le if
et else
portions de l'opérateur ternaire PHP comme ceci:
echo (true) ? "yes" : "no"; //prints yes
echo (false) ? "yes" : "no"; //prints no
Comment puis-je obtenir la portion "elseif" comme ceci dans l'opérateur ternaire?
<?php
if($result->vocation == 1){
echo "Sorcerer";
}else if($result->vocation == 2){
echo 'Druid';
}else if($result->vocation == 3){
echo 'Paladin';
}else if($result->vocation == 4){
echo 'Knight';
}else if($result->vocation == 5){
echo 'Master Sorcerer';
}else if($result->vocation == 6){
echo 'Elder Druid';
}else if($result->vocation == 7){
echo 'Royal Paladin';
}else{
echo 'Elite Knight';
}
?>
8 réponses
Un Ternaire n'est pas une bonne solution pour ce que vous voulez. Il ne sera pas lisible dans votre code, et il ya beaucoup de meilleures solutions disponibles.
Pourquoi ne pas utiliser un tableau de recherche "carte" ou "dictionnaire", comme ceci:
$vocations = array(
1 => "Sorcerer",
2 => "Druid",
3 => "Paladin",
...
);
echo $vocations[$result->vocation];
un ternaire pour cette application finirait par ressembler à ceci:
echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));
Pourquoi est-ce mauvais? Parce que-en tant que seule ligne longue, vous n'obtiendriez aucune information de débogage valide si quelque chose se passait mal ici, la longueur le rend difficile à lire, plus l'imbrication des multiples ternaires sent juste étrange.
Un Standard Ternaire est simple, facile à lire, et ressemblerait à ceci:
$value = ($condition) ? 'Truthy Value' : 'Falsey Value';
ou
echo ($some_condition) ? 'The condition is true!' : 'The condition is false.';
un ternaire est vraiment juste une façon pratique / plus courte d'écrire un simple if else
déclaration. L'exemple ci-dessus ternaire est la même chose que:
if ($some_condition) {
echo 'The condition is true!';
} else {
echo 'The condition is false!';
}
cependant, un ternaire pour une logique complexe devient rapidement illisible, et ne vaut plus la peine brièveté.
echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));
même avec un formatage attentif pour l'étaler sur plusieurs lignes, ce n'est pas très clair:
echo($result->group_id == 1
? "Player"
: ($result->group_id == 2
? "Gamemaster"
: ($result->group_id == 3
? "God"
: "unknown")));
Puisqu'il s'agit d'une tâche courante, je suggère d'envelopper un commutateur/boîtier à l'intérieur d'un appel de fonction.
function getVocationName($vocation){
switch($vocation){
case 1: return "Sorcerer"; break;
case 2: return 'Druid'; break;
case 3: return 'Paladin'; break;
case 4: return 'Knight'; break;
case 5: return 'Master Sorcerer'; break;
case 6: return 'Elder Druid'; break;
case 7: return 'Royal Paladin'; break;
default: return 'Elite Knight'; break;
}
}
echo getVocationName($result->vocation);
echo ($result ->vocation == 1) ? 'Sorcerer'
: ($result->vocation == 2) ? 'Druid'
: ($result->vocation == 3) ? 'Paladin'
....
;
C'est un peu laid. Vous devriez coller avec la normale if
consolidés.
comment écrire un opérateur ternaire PHP de base:
($your_boolean) ? 'This is returned if true' : 'This is returned if false';
Exemple:
$myboolean = true;
echo ($myboolean) ? 'foobar' : "penguin";
foobar
echo (!$myboolean) ? 'foobar' : "penguin";
penguin
PHP opérateur ternaire avec un "elseif' entassées là:
$chow = 3;
echo ($chow == 1) ? "one" : ($chow == 2) ? "two" : "three";
three
mais s'il vous plaît ne nichez pas les opérateurs ternaires, sauf pour des trucs de salon. C'est une mauvaise odeur de code.
pour être honnête, un opérateur ternaire ne ferait qu'empirer les choses, ce que je suggérerais si vous voulez simplifier c'est:
$groups = array(1=>"Player", 2=>"Gamemaster", 3=>"God");
echo($groups[$result->group_id]);
et puis un similaire pour les vocations
$vocations = array(
1=>"Sorcerer",
2=>"Druid",
3=>"Paladin",
4=>"Knight",
....
);
echo($vocations[$result->vocation]);
Avec un opérateur ternaire, vous vous retrouvez avec
echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));
comme vous pouvez le dire, seulement devient plus compliqué, plus vous ajoutez à cela
je préférerais plutôt que des déclarations ternaires si-aller avec un commutateur-case. Par exemple:
switch($result->vocation){
case 1:
echo "Sorcerer";
break;
case 2:
echo "Druid";
break;
case 3:
echo "Paladin";
break;
case 4:
echo "Knight";
break;
case 5:
echo "Master Sorcerer";
break;
case 6:
echo "Elder Druid";
break;
case 7:
echo "Royal Paladin";
break;
default:
echo "Elite Knight";
break;
}
Vous n'auriez pas: c'est salissant et difficile à lire.
Vous êtes à la recherche pour le switch
déclaration dans le premier cas. Le second est très bien comme il est mais pourrait encore être converti pour la cohérence
les énoncés ternaires sont beaucoup plus adaptés aux valeurs booléennes et à la logique alternative.
switch ($result->vocation) {
case 1:
echo 'Sorcerer';
break;
case 2:
echo 'Druid';
break;
case 3:
echo 'Paladin';
break;
case 4:
echo 'Knight';
break;
case 5:
echo 'Master Sorcerer';
break;
case 6:
echo 'Elder Druid';
break;
case 7:
echo 'Royal Paladin';
break;
default:
echo 'Elite Knight';
break;
}