Comment écrire un opérateur PHP) avec la partie elseif?
Je vois des exemples basiques avec les parties if
et else
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 partie "elseif" comme celle-ci 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';
}
?>
Un ternaire n'est pas une bonne solution pour ce que vous voulez. Il ne sera pas lisible dans votre code et de meilleures solutions sont disponibles.
Pourquoi ne pas utiliser un tableau "look" 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 qu'en tant que longue ligne, vous n'obtiendrez aucune information de débogage valide si quelque chose n'allait pas, la longueur rend la lecture difficile, de même que l'imbrication de plusieurs ternaires semble étrange.
n ternaire standard 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 n’est en réalité qu’un moyen pratique/court d’écrire un simple if else
déclaration. Le ternaire ci-dessus est le même 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 brièveté.
echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));
Même avec une mise en forme attentive 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")));
Étant donné que ce serait une tâche courante, je suggérerais de placer un commutateur/une casse dans 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 moche. Vous devriez vous en tenir aux instructions if
normales.
Comment écrire un élément de base PHP Opérateur ternaire:
($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
A PHP opérateur ternaire avec un 'elseif' entassé dedans:
$chow = 3;
echo ($chow == 1) ? "one" : ($chow == 2) ? "two" : "three";
three
Mais s'il vous plaît, n'impliquez pas les opérateurs ternaires, à l'exception des artifices de parloir. C'est une mauvaise odeur de code.
Vous ne le feriez pas: c’est difficile et difficile à lire.
Vous recherchez l’instruction switch
dans le premier cas. La seconde est bien comme elle est mais peut toujours être convertie pour la cohérence
Les déclarations ternaires sont beaucoup plus adaptées aux valeurs booléennes et à l'alternance de la logique.
Pour être honnête, un opérateur ternaire ne ferait qu'aggraver la situation. Ce que je suggérerais, si vous voulez simplifier les choses, est de:
$groups = array(1=>"Player", 2=>"Gamemaster", 3=>"God");
echo($groups[$result->group_id]);
et puis un semblable pour vos vocations
$vocations = array(
1=>"Sorcerer",
2=>"Druid",
3=>"Paladin",
4=>"Knight",
....
);
echo($vocations[$result->vocation]);
Avec un opérateur ternaire, vous vous retrouveriez avec
echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));
Ce qui, comme vous pouvez le constater, ne fait que devenir plus compliqué à mesure que vous en rajoutez
Je préférerais que les déclarations si ternaires soient assorties d'un commutateur. 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;
}
En plus de toutes les autres réponses, vous pouvez utiliser switch
. Mais cela semble un peu long.
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 pouvez aussi faire:
echo "yes" ?: "no" // Assuming that yes is a variable that can be false.
Au lieu de:
echo (true) ? "yes" : "no";