Maison >développement back-end >tutoriel php >Pourquoi l'opérateur ternaire et la concaténation de chaînes produisent-ils des résultats indésirables ?

Pourquoi l'opérateur ternaire et la concaténation de chaînes produisent-ils des résultats indésirables ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-24 05:12:011005parcourir

Why Do Ternary Operator and String Concatenation Produce Unwanted Results?

Opérateur ternaire et comportement de concaténation de chaînes

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn