Cumul de Plusieurs Opérateurs Ternaires en PHP
C'est ce que j'ai écrit :
$Myprovince = (
($province == 6) ? "city-1" :
($province == 7) ? "city-2" :
($province == 8) ? "city-3" :
($province == 30) ? "city-4" : "out of borders"
);
Mais pour chaque champ, j'ai eu la valeur city-4
. Je veux utiliser ternaire opérateurs au lieu de switch/if
parce que je veux expérimenter et de voir comment il sera fait.
Quel est le problème avec ce code?
- Est-il une raison pour laquelle vous ne voulez pas de simplement utiliser
if / elseif
ouswitch
? - Vous auriez besoin de beaucoup plus de crochets pour que cela fonctionne. L'utilisateur a
switch
comme Marc l'a suggéré. - vous êtes me rend fou avec curiosité 😀 ! Pourquoi avez-vous besoin d'utiliser ternaire opérateurs?
- À l'aide de ternaire opérateurs complexes imbriquées conditions est pas recommandée pour de très bonnes raisons... parce qu'elles sont entachées de problèmes, et il est extrêmement difficile d'identifier des bugs. Vous venez de découvrir ce! Si vous ne savait vraiment comment les utiliser, vous ne serait pas à demander de l'aide! Alors, pourquoi voulez-vous toujours d'utiliser les opérateurs ternaires dans ce cas?
- im en utilisant ternaire opérateurs en raison de ma propre curiosité rien d'autre , je sais que c'est pas bon pour le complexe de conditions de déclaration, mais dans l'apprentissage et de test php détails j'ai besoin de le corriger 😀
- Vérifiez vos réponses ci-dessous: stackoverflow.com/questions/5235632/5235721#5235721
- Wow, c'est le plus massivement voté sur des tas de commentaires et de réponses que j'ai jamais vu.
- Vous devez être nouveau ici.
- au moins nous dire que vous n'êtes pas à l'aide de cette dans le code réel, ainsi nous pouvons nous sentir mieux à ce sujet
- dieu , s'il vous plaît , je ne VOUDRAIS PAS UTILISER CETTE Méthode dans un script , jamais, jamais , êtes-vous mieux maintenant ? juste curieux de savoir comment l'utiliser 😀
- wow. Si il y a une raison légitime le code ne fonctionne pas comme prévu, puis par tous les moyens il remarquer. "réponses" d'interroger les motivations de l'arbitraire des exemples sont beaucoup plus inapproprié que le motif de l'arbitraire des exemples. +1 pour codaddict et @arnorhs pour réfléchis ajouts.
Vous devez vous connecter pour publier un commentaire.
D'autres l'ont déjà suggéré la bonne façon de le faire, mais si vous voulez vraiment utiliser l'opérateur ternaire vous devez utiliser des parenthèses comme:
Lien Mis À Jour
switch
déclaration de tableau ou de recherche est l'sane de chemin à faire si vous vous souciez de code de la lisibilité/maintenabilité.ternary
dans votre post original.'abc'
avec la concaténation de chaîne'a'.'b'.'c'
, mais pourquoi faire? Amusez-vous en ajoutant une nouvelle ville pour vos ternaire de la bête et n'oubliez pas de compter pour correspondre à la parenthèse!L'opérateur ternaire est évaluée de gauche à droite. Donc, si vous ne regroupez pas les expressions correctement, vous obtiendrez un résultat inattendu.
PHP conseille [docs]:
Votre code est évalué comme:
où il devrait être
Ce code peut paraître bien, mais quelqu'un va le lire et ils auront besoin de plus de temps que ce qu'ils devraient comprendre ce que ce code est en train de faire.
Vous serait mieux avec quelque chose comme ceci:
Ou @Jonas mentionné dans son commentaire:
$Myprovince = isset($map[$province]) ? $map[$province] : 'out of borders';
😉($province == 6) ? "city-1" : ($province == 7) ? "city-2" : ($province == 8) ? "city-3" : ($province == 30) ? "city-4" : "out of borders";
?
et:
😉Ne pas abuser de l'opérateur ternaire pour ce genre de chose. Il rend le débogage près impossible à suivre. Pourquoi ne pas faire quelque chose comme
ou tout simplement une enchaîné if/then/else
Certaines personnes ont suggéré l'utilisation d'un switch ou d'un if/else. Mais je voudrais utiliser un tableau au lieu de cela, pour le rendre plus facile à maintenir et plus facile à lire:
Pourquoi?
Le code sera probablement éventuellement être plus facile à gérer. Peut-être que vous voulez ajouter à ceux de la province, de ville en mappages de base de données, un jour.. etc.. Qui sera difficile à maintenir avec un tas de switch/case consolidés.
Je comprends que c'est une question à propos de PHP, mais puisque c'est juste un exercice éducatif de toute façon j'ai pensé que vous pourriez être intéressés à en apprendre que Ruby et Javascript en fait se comporter de la façon dont vous vous attendez.
Ruby:
Javascript:
Essayer avec un peu plus de la parenthèse :
Votre code a un problème avec l'opérateur ternaire priorité.
Mais je pense que vous devriez vraiment chute de cet opérateur, et essayez d'utiliser un
switch
à la place.Utilisation de l'interrupteur à la place. Ternaire opérateurs vraiment ne doit pas être utilisé pour plus que de simples conditions, comme ils deviennent rapidement très difficile à comprendre.