opérateur ternaires et concaténation chaîne bizarrerie?
-
19-09-2019 - |
Question
Salut, je veux juste savoir pourquoi ce rendement de code (au moins pour moi) un de résultat incorrect.
Eh bien, probablement que je suis en faute ici
$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';
Je devinais que si paperType est égal à « Bond », puis la description est «papier: Bond et si paperType n'est pas égale à « Bond », puis la description est « papier: Autre ».
Mais quand je lance ce code les résultats sont la description est soit « Bond » ou « Autre » et m'a laissé se demandant où la chaîne « papier: » a ???
La solution
$description = 'Paper: ' . ($paperType == 'bond' ? 'Bond' : 'Other');
Essayez d'ajouter entre parenthèses si la chaîne est concaténée à une chaîne dans l'ordre.
Autres conseils
Il est lié à la priorité des opérateurs. Vous devez faire ce qui suit:
$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');
Je pense que tout le monde a la solution, je voudrais contribuer la raison du résultat inattendu.
Tout d'abord, ici vous pouvez vérifier l'origine et la façon dont les opérateurs sont évalués (à gauche, à droite, associative, etc.).
http://php.net/manual/fa/language.operators .precedence.php
Maintenant, si nous analysons votre phrase.
$ paperType = 'bond';
$ description = 'Paper:'. ($ paperType == 'bond')? 'Bond': 'Other';
1) Nous passons en revue le tableau et que les parenthèses sont évaluées d'abord, puis le « » (Concaténation) est évalué et à la fin de l'opérateur ternaire, on pourrait donc associer cela comme suit '?:
// evaluate the parenthesis ... ($ paperType == 'bond')
$ description = ('Paper:'. 1)? 'Bond': 'Other';
//result
$ description = 'Paper: 1'? 'Bond': 'Other';
2) Nous avons maintenant l'opérateur ternaire, nous savons qu'une chaîne est évaluée « true »
// documentation php Lors de la conversion en booléen, les valeurs suivantes sont considérées comme FAUX:
... la chaîne vide, et la chaîne « 0 »
$ description = true? 'Bond': 'Other';
3) Enfin
$ description = 'bond';
J'espère avoir clarifié la question. Salutations.