The if statement doesn't work for false in php
When trying to get familiar with{-code-1}
statement in PHP, this happened.
First time i tried this code below.
{-code-1}(true) {echo 'true';} else {echo 'false';}
And the output wastrue
when the condition istrue
. Again, when the condition isfalse
({-code-1}(false)
) it echosfalse
.
But i tried the same, using a variable as the condition, while changing the value of the variable.
$con='false';
{-code-1}($con){echo 'true';} else{echo 'false';}
At this situation the output istrue
even when the variable value isfalse
ortrue
. At the same time, the{-code-1} statement
working fine when1
and0
is used insteadtrue
andfalse
. Why is this happening?
Answer
Solution:
That
'false'
is a valid string which is not BooleanFALSE
, just like$con='hi';
isn't.To quote from the Manual
Also read these other options that you have
Then you observed this
This is because 0 in any form is FALSE, either string or numeric. But the text
false
as a string is not false for reasons mentioned above.Also read about PHP Strict Comparisons since you're learning, because
Answer
Solution:
PHP does some sneaky things in the if expression. The following values are considered FALSE:
Every other value is considered TRUE (including any resource).
You're actually passing a string that says the word false, rather than the value false itself. Because that isn't in the above list, it is actually considered true!
Answer
Solution:
So as per docs try using
Answer
Solution:
You are using 'false' as a STRING variable, but that is the WORD false, not the BOOLEAN constant. Just use false
And when you are doing if statements, this will work:
or you can use a === which compares one expression to another by value and by type.
Answer
Solution:
Use a bool instead of a string:
Your if statement will simply check that $con is not empty, so in your example it will always be true.
Answer
Solution:
You can assign value to variable like this
Answer
Solution:
In your second example,
$con
isn't the booleanfalse
, it's a string literal'false'
(note the quotes), and any non-empty string in PHP evaluates astrue
.To fix this, just drop the quotes:
Answer
Solution:
Your $con declaration is a string not a bool. So it will always return true. To declare a boolean, use:
Answer
Solution:
'false'
is not same asfalse
.if('true')
orif('false')
will resulttrue
always as they will be treated asstring
s and will be converted for comparison.Will print
false
Answer
Solution:
change the value of your variable to this