if语句没有';在php中不适用于false
当试图熟悉PHP中的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,输
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中引入的,无论如何,我会去掉它以消除任何混淆。