En programmation, l'opérateur ternaire (?) offre un moyen concis d'évaluer les conditions et d'attribuer des valeurs. Cependant, certaines nuances liées à la concaténation de chaînes peuvent conduire à un comportement inattendu.
Considérez l'extrait de code suivant :
<code class="php">$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';</code>
L'objectif ici est d'attribuer une description différente en fonction de la valeur de $type de papier. Si $paperType est égal à « bond », $description doit être « Paper : Bond ». Sinon, il devrait s'agir de « Papier : Autre ».
Cependant, le résultat réel diffère de ce qui était prévu. Au lieu d'ajouter le préfixe « Papier : », il renvoie uniquement « Bond » ou « Autre ».
Pour comprendre pourquoi cela se produit, décomposons le code :
<code class="php">($paperType == 'bond') ? 'Bond' : 'Other'</code>
Cette expression évalue la condition $paperType == 'bond'. Si c'est vrai, cela renvoie « Bond ». Si faux, il renvoie « Autre ».
Dans le code d'origine, cette expression est directement concaténée à la chaîne « Papier : ».
<code class="php">'Paper: ' . (condition ? 'Bond' : 'Other')</code>
Le problème se pose car la chaîne « Papier : » : ' est concaténé au résultat de l'expression ternaire, pas à la condition elle-même. Ainsi, si $paperType est égal à « bond », le résultat est « Bond », qui est concaténé avec une chaîne vide (en raison des deux points de fin), donnant « Bond ».
Pour obtenir le comportement souhaité, le La concaténation des chaînes doit être placée entre parenthèses :
<code class="php">$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');</code>
Cela garantit que la chaîne 'Paper:' est concaténée à l'expression ternaire évaluée, ce qui donne les valeurs correctes : 'Paper: Bond' si $paperType est ' caution' et 'Papier : Autre' sinon.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!