The if statement doesn't work for false in php

2020-07-10 07:13发布

When trying to get familiar with if statement in PHP, this happened. First time i tried this code below.

if(true) {echo 'true';} else {echo 'false';}

And the output was true when the condition is true. Again, when the condition is false (if(false)) it echos false.

But i tried the same, using a variable as the condition, while changing the value of the variable.

$con='false';
if($con){echo 'true';} else{echo 'false';} 

At this situation the output is true even when the variable value is false or true. At the same time, the if statement working fine when 1 and 0 is used instead true and false. Why is this happening?

10条回答
疯言疯语
2楼-- · 2020-07-10 07:14

PHP does some sneaky things in the if expression. The following values are considered FALSE:

  • the boolean FALSE itself
  • the integer 0 (zero)
  • the float 0.0 (zero)
  • the empty string, and the string "0"
  • an array with zero elements
  • an object with zero member variables (PHP 4 only)
  • the special type NULL (including unset variables)
  • SimpleXML objects created from empty tags

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!

查看更多
Lonely孤独者°
3楼-- · 2020-07-10 07:14

change the value of your variable to this

   $con = false;    
查看更多
够拽才男人
4楼-- · 2020-07-10 07:17

You can assign value to variable like this

$con=false;
查看更多
我欲成王,谁敢阻挡
5楼-- · 2020-07-10 07:20

Use a bool instead of a string:

$con = false;

Your if statement will simply check that $con is not empty, so in your example it will always be true.

查看更多
该账号已被封号
6楼-- · 2020-07-10 07:24
$con='false';

That 'false' is a valid string which is not Boolean FALSE, just like $con='hi'; isn't.

$con=FALSE;  //this is false now

To quote from the Manual

To specify a boolean literal, use the constants TRUE or FALSE. Both are case-insensitive.

Also read these other options that you have

When converting to boolean, the following values are considered FALSE:

◦ the boolean FALSE itself
◦ the integer 0 (zero)
◦ the float 0.0 (zero)
◦ the empty string, and the string "0"
◦ an array with zero elements
◦ an object with zero member variables (PHP 4 only)
◦ the special type NULL (including unset variables)
◦ SimpleXML objects created from empty tags

Then you observed this

At the same time, the if statement working fine when 1 and 0 is used instead true and false. Why is this happening?

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

var_dump(0==FALSE);    //bool(true)
var_dump(0===FALSE);   //bool(false)   :)
查看更多
\"骚年 ilove
7楼-- · 2020-07-10 07:24

Your $con declaration is a string not a bool. So it will always return true. To declare a boolean, use:

$con=FALSE;  //or TRUE
查看更多
登录 后发表回答