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
Libérer: 2024-10-24 05:12:01
original
1004 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal