Reputation: 4116
Hi I just want to know why this code yields (at least for me) an incorrect result.
Well, probably i'm in fault here
$description = 'Paper: ' . ($paperType == 'bond') ? 'Bond' : 'Other';
I was guessing that if paperType equals 'Bond' then description is 'Paper: Bond' and if paperType is not equals to 'Bond' then description is 'Paper: Other'.
But when I run this code the results are description is either 'Bond' or 'Other' and left me wondering where the string 'Paper: ' went???
Upvotes: 65
Views: 29445
Reputation: 736
I think everyone gave the solution, I would like to contribute the reason for the unexpected result.
First of all here you can check the origin, and how the operators are evaluated (left, right, associative, etc).
http://php.net/manual/fa/language.operators.precedence.php
Now if we analyze your sentence.
$paperType = 'bond';
$description = 'Paper:'. ($paperType == 'bond') ? 'Bond': 'Other';
// evaluate the parenthesis ... ($paperType == 'bond')
$description = ('Paper:'. 1)? 'Bond': 'Other';
//result
$description = 'Paper: 1'? 'Bond': 'Other';
// php documentation When converting to boolean, the following values are considered FALSE:
... the empty string, and the string "0"
$description = true? 'Bond': 'Other';
$description = 'bond';
I hope I have clarified the question. Greetings.
Upvotes: 6
Reputation: 91319
It is related with operator precedence. You have to do the following:
$description = 'Paper: ' . (($paperType == 'bond') ? 'Bond' : 'Other');
Upvotes: 13
Reputation: 186562
$description = 'Paper: ' . ($paperType == 'bond' ? 'Bond' : 'Other');
Try adding parentheses so the string is concatenated to a string in the right order.
Upvotes: 124