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 ???

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top