if语句没有';在php中不适用于false

if语句没有';在php中不适用于false,php,if-statement,Php,If Statement,当试图熟悉PHP中的if语句时,发生了这种情况。 我第一次尝试下面的代码 if(true) {echo 'true';} else {echo 'false';} 当条件为true时,输出为true。同样,当条件为false(if(false))时,它会回显false 但是我尝试了同样的方法,使用变量作为条件,同时更改变量的值 $con='false'; if($con){echo 'true';} else{echo 'false';} 在这种情况下,即使变量值为false或true,输

当试图熟悉PHP中的
if
语句时,发生了这种情况。 我第一次尝试下面的代码

if(true) {echo 'true';} else {echo 'false';}
当条件为
true
时,输出为
true
。同样,当条件为
false
if(false)
)时,它会回显
false

但是我尝试了同样的方法,使用变量作为条件,同时更改变量的值

$con='false';
if($con){echo 'true';} else{echo 'false';} 
在这种情况下,即使变量值为
false
true
,输出也是
true
。同时,当使用
1
0
时,
if语句
工作正常
true
false
。为什么会这样

$con='false';
'false'
是一个有效字符串,它不是布尔值
false
,就像
$con='hi'不是

$con=FALSE;  //this is false now
引用

要指定布尔文字,请使用常量TRUE或FALSE。两者都不区分大小写

另外,请阅读您拥有的其他选项

转换为布尔值时,以下值被视为FALSE:

◦ 布尔值本身为FALSE
◦ 整数0(零)
◦ 浮动0.0(零)
◦ 空字符串和字符串“0”
◦ 具有零元素的数组
◦ 具有零成员变量的对象(仅限PHP 4)
◦ 特殊类型NULL(包括未设置的变量)
◦ 从空标记创建的SimpleXML对象

然后你观察到了这一点

同时,当使用1和0代替true和false时,if语句工作正常。为什么会这样

$con='false';
这是因为任何形式的0都是FALSE,无论是字符串还是数字。但是由于上述原因,作为字符串的文本
false
不是false

既然您正在学习PHP,也可以阅读PHP,因为

var_dump(0==FALSE);    //bool(true)
var_dump(0===FALSE);   //bool(false)   :)

您可以像这样为变量赋值

$con=false;

'false'
false
不同

if('true')
if('false')
的结果总是
true
,因为它们将被视为
string
s,并将被转换以进行比较

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

将打印
false

在第二个示例中,
$con
不是布尔值
false
,它是一个字符串文本
'false'
(请注意引号),PHP中的任何非空字符串的计算结果都是
true

要解决此问题,只需删除引号:

$con=false; // no quotes!
if($con){echo 'true';} else{echo 'false';} 

使用布尔值而不是字符串:

$con = false;
if语句将简单地检查$con是否为空,因此在您的示例中它将始终为真

如关于表达式一节中所述,表达式将计算为其布尔值。若表达式的计算结果为TRUE,PHP将执行语句,若表达式的计算结果为FALSE,则将忽略它。有关哪些值计算为FALSE的更多信息,请参见部分

因此,根据文档尝试使用

$con = false;//boolean and not a string
if($con){echo 'true';} else{echo 'false';} 
转换为布尔值时,以下值被视为FALSE:

◦ 布尔值本身为FALSE
◦ 整数0(零)
◦ 浮动0.0(零)
◦ 空字符串和字符串“0”
◦ 具有零元素的数组
◦ 具有零成员变量的对象(仅限PHP 4)
◦ 特殊类型NULL(包括未设置的变量)
◦ 从空标记创建的SimpleXML对象


PHP在if表达式中做了一些鬼鬼祟祟的事情。以下值被认为是错误的:

  • 布尔值本身是假的
  • 整数0(零)
  • 浮动0.0(零)
  • 空字符串和字符串“0”
  • 零元素数组
  • 具有零成员变量的对象(仅限PHP 4)
  • 特殊类型NULL(包括未设置的变量)
  • 从空标记创建的SimpleXML对象
其他所有值均视为真(包括任何资源)


实际上,您传递的是一个表示单词false的字符串,而不是值false本身。因为这不在上面的列表中,它实际上被认为是正确的

您的$con声明是一个字符串而不是bool。因此,它将始终返回真实。 要声明布尔值,请使用:

$con=FALSE;  //or TRUE

您正在使用'false'作为字符串变量,但这是单词false,而不是布尔常量。只需使用false

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

$con='false';  // Wrong
$con=false; // Right
if($con){echo 'true';} else{echo 'false';} 
当您执行if语句时,这将起作用:

if ($con == false) { echo 'false'; }
或者可以使用===将一个表达式按值和类型与另一个表达式进行比较

if ($con === false) { echo 'false with type safe comparison!'; }

将变量的值更改为

   $con = false;    

所以许多的回答:O“从PHP5.3开始”?在最近的历史中,布尔比较并没有任何变化。@deceze我认为PHP检查字符串是否为空是在PHP5.3中引入的,无论如何,我会去掉它以消除任何混淆。