note 41534 deleted from language.operators.comparison by cmb
| From: | cmb@php.net | Date: | Sun, 11 Aug 2019 11:56:29 +0000 |
| Subject: | note 41534 deleted from language.operators.comparison by cmb | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-211848@lists.php.net to get a copy of this message | ||
Note Submitter: webmaster __AT__ digitalanime __DOT__ nl
----
WARNING!!!!
Let's say, we have this little script:
<?php
$username = 'Me';
$guestusername = 'Guest';
echo 'Hello, ' . isset($i) ? 'my friend: ' . $username . ', how are you
doing?' : 'my guest, ' . $guestusername . ', please register';
?>
What you want:
If $i is set, display:
Hello, my friend: Me, how are you doing?
If not, display:
Hello, my guest, Guest, please register
BUT, you DON'T get that result!
If $i is set, you get this:
my friend: Me, how are you doing? (so, there's not "Hello, " before it)
If $i is NOT set, you get this:
my friend: Me, how are you doing?
So... That's the same!
You can solve this by using the "(" and ")" to give priority to the ternary
operator:
<?php
$username = 'Me';
$guestusername = 'Guest';
echo 'Hello, ' . (isset($i) ? 'my friend: ' . $username . ', how are you
doing?' : 'my guest, ' . $guestusername . ', please register');
?>
When $i is set, you get this:
Hello, my friend: Me, how are you doing? (expected)
When $i is NOT set, you get this:
Hello, my guest, Guest, please register (expected too)
So.. Please, don't be dumb and ALWAYS use the priority-signs (or.. How do you call them?), (
and ).
By using them, you won't get unneeded trouble and always know for sure your code is doing what
you want: The right thing.