DEV Community

Waqar Ahmed
Waqar Ahmed

Posted on • Updated on • Originally published at Medium

PHP Tricky True False Examples

The result of a PHP True False statement might be different from what looks like a simple and logical result.

PHP Comparison Operators == VS ===

PHP with loosely == operator will not compare type, so numeric strings will be converted to numbers and compared numerically. Below are two examples: for more on PHP comparisons, check the PHP.net page.

var_dump(0 == "a"); // 0 == 0 -> true
var_dump(10 == "1e1"); // 10 == 10 -> true

PHP strict comparison === will not convert string to a numeral. It compares both: type and the value. So examples above, comparing two of the different types, will always be false.

var_dump("1" === "01"); // 0 == "a" -> false
var_dump("10" === "1e1"); // 10 == "1e1" -> false

StackOverflow user Nick has added nice detailed comparison tables of == and === operators with TRUE, FALSE, NULL, 0, 1, -1, ‘0’, ‘1’, ‘-1’.

PHP TRUE, FALSE

In PHP: an undeclared variable, empty array, “0”, 0 and empty string are false while -1 is true. Here are some more TRUE, FALSE examples.

PHP STRINGS

var_dump((bool) "");        // bool(false)
var_dump((bool) "0");       // bool(false)
var_dump((bool) "1");       // bool(true)
var_dump((bool) "alpha");   // bool(true)
Enter fullscreen mode Exit fullscreen mode

PHP INT, FLOAT

var_dump((bool) 1);           // bool(true)
var_dump((bool) -1);          // bool(true)
var_dump((bool) 2.3e5);       // bool(true)
var_dump((bool) -2);          // bool(true)
var_dump((bool) 0.0);         // bool(false)
var_dump((bool) -0.1);        // bool(true)
Enter fullscreen mode Exit fullscreen mode

PHP ARRAYS

var_dump((bool) array());    // bool(false)
var_dump((bool) array(5));   // bool(true)
Enter fullscreen mode Exit fullscreen mode

OTHERS

var_dump((bool) "false");   // bool(true)
var_dump((bool) NULL);      // bool(false)
Enter fullscreen mode Exit fullscreen mode

PHP Functions

Return values of some commonly used PHP core functions might break the conditional flow by returning NULL or int() integer values. For example stripos() can return 0 which will be interpreted as false in an IF conditional block.

$text = 'abc xyz';
$pos = strpos($text, 'a');
var_dump($pos);  
//result: int(0) 
Enter fullscreen mode Exit fullscreen mode

This code will return true with the output of string position int(0). This return value zero evaluates to the false.

if (!strpos($text, 'a')) {echo "'a' not found in '$text'";}
//result: 'a' not found in 'abc xyz'
Enter fullscreen mode Exit fullscreen mode

Above code will detect “a” but if block will evaluate to false as a’s position is 0.
Instead, explicitly check if the value returned is not FLASE

if(strpos($text, 'a') === FALSE){echo "'a' not found in '$text'";}
Enter fullscreen mode Exit fullscreen mode

I am also on Twitter. You can follow me there as I regularly tweet about my journey.

Top comments (2)

Collapse
 
nicolus profile image
Nicolus

My favorite :

define('TRUE', false);
define('FALSE', true);
Enter fullscreen mode Exit fullscreen mode
Collapse
 
waqar profile image
Waqar Ahmed

:) from now on, I will always check constants before refactoring a code.