Maison > Questions et réponses > le corps du texte
Le résultat de l'évaluation en Java et en js est de 5, mais en PHP il est de 4
Est-ce parce que ma formule n'est pas écrite de manière standardisée ? Ou est-ce pour d'autres raisons ? J'ai demandé à d'autres de l'essayer en utilisant le langage .net et c, les deux sont 5
[Résolu] Merci pour vos réponses. Je suppose que la formule n'est pas écrite de manière standardisée, car je l'ai toujours. Je pense que le ternaire va de droite à gauche, j'ai donc omis la dernière parenthèse (je l'ai souvent écrit de cette façon auparavant, je vais le corriger par souci de standardisation, il devrait être 3<8 ?(9<6 ?). 7:5):(2>0?4:1 )
typecho2017-06-08 11:04:07
Le problème avec la direction de combinaison de l'opérateur ternaire :
java de droite à gauche. Équivalent à 3<8?(9<6?7:5):(2>0?4:1)
3<8?(9<6?7:5):(2>0?4:1)
php 从做向右。等效于(3<8?(9<6?7:5):2)>0?4:1
php de faire à droite. Équivalent à (3<8?(9<6?7:5):2)>0?4:1
Par conséquent, afin d'éviter la génération de code ambigu, il vaut mieux ne pas omettre les parenthèses qui doivent être écrites
过去多啦不再A梦2017-06-08 11:04:07
L'ordre de combinaison des opérations ternaires de PHP est inversé
http://www.jianshu.com/p/124f...
代言2017-06-08 11:04:07
Je suppose que l'interprétation de la priorité par PHP est différente de celle de Java, js et d'autres langages. Elle peut être interprétée comme (3 < 8 ? (9 < 6 ? 7 : 5) : 2 > 0) ? 4 : 1
某草草2017-06-08 11:04:07
En PHP, cela ressemble à ceci :
$a = (3 < 8 ? (9 < 6 ? 7 : 5): 2 > 0)
? 4
: 1;
Il est donc 4 heures ;
En JavaScript, cela ressemble à ceci :
var a = (3 < 8)
? (9 < 6 ? 7 : 5)
: (2 > 0 ? 4 : 1);
Il est donc 5 heures.
Donc si vous ne connaissez pas la préséance de l’opérateur, complétez simplement les parenthèses. ^_^