php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #54576 or is diffĂ©rent of true
Submitted: 2011-04-20 16:02 UTC Modified: 2011-04-20 18:49 UTC
From: dungar at kabia dot fr Assigned:
Status: Not a bug Package: Unknown/Other Function
PHP Version: 5.3.6 OS: debian
Private report: No CVE-ID: None
 [2011-04-20 16:02 UTC] 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)


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2011-04-20 18:49 UTC] dtajchreber@php.net
-Status: Open +Status: Bogus
 [2011-04-20 18:49 UTC] dtajchreber@php.net
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
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Tue Jul 15 06:01:33 2025 UTC