note 41534 added to language.operators.comparison

From: Date: Tue, 13 Apr 2004 19:31:15 +0000
Subject: note 41534 added to language.operators.comparison
Groups: php.notes 
Request: Send a blank email to php-notes+get-68091@lists.php.net to get a copy of this message
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. ---- Manual Page -- http://www.php.net/manual/en/language.operators.comparison.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+41534 Delete -- http://master.php.net/manage/user-notes.php?action=delete+41534&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+41534&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#68091) next »