Edit report at http://bugs.php.net/bug.php?id=54576&edit=1
ID: 54576 Updated by: dtajchre...@php.net Reported by: dungar at kabia dot fr Summary: or is différent of true -Status: Open +Status: Bogus Type: Bug Package: Unknown/Other Function Operating System: debian PHP Version: 5.3.6 Block user comment: N Private report: N New Comment: The ternary binds closer than the or operator. What you're actually running is: var_dump(false or (false ? 'true' : 'false')); So here's a different view: var_dump((bool)'false'); /* true */ var_dump(false or (false ? 'true' : 'false')); /* false or true */ var_dump(false or false ? 'true' : 'false'); /* true */ [1] http://php.net/manual/en/language.operators.precedence.php [2] http://us2.php.net/manual/en/language.types.boolean.php Previous Comments: ------------------------------------------------------------------------ [2011-04-20 16:02:00] dungar at kabia dot fr Description: ------------ var_dump(false or false ? 'true' : 'false'); => boolean true Test script: --------------- var_dump(false or false ? 'true' : 'false'); var_dump(false || false ? 'true' : 'false'); if ( false | false ) var_dump('true'); else var_dump('false'); if ( false || false ) var_dump('true'); else var_dump('false'); if ( false or false ) var_dump('true'); else var_dump('false'); exit; Expected result: ---------------- string 'false' (length=5) string 'false' (length=5) string 'false' (length=5) string 'false' (length=5) string 'false' (length=5) Actual result: -------------- boolean true string 'false' (length=5) string 'false' (length=5) string 'false' (length=5) string 'false' (length=5) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=54576&edit=1