当试图熟悉if
PHP中的语句时,就发生了这种情况.我第一次尝试下面的代码.
if(true) {echo 'true';} else {echo 'false';}
Run Code Online (Sandbox Code Playgroud)
输出就是true
条件true
.同样,当条件是false
(if(false)
)它回声false
.
但我尝试使用变量作为条件,同时更改变量的值.
$con='false';
if($con){echo 'true';} else{echo 'false';}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,true
即使变量值为false
或,输出也是如此true
.与此同时,该if statement
罚款时,工作1
和0
来代替true
和false
.为什么会这样?
Han*_*nky 10
$con='false';
Run Code Online (Sandbox Code Playgroud)
这'false'
是一个非布尔的有效字符串FALSE
,就像$con='hi';
不是.
$con=FALSE; //this is false now
Run Code Online (Sandbox Code Playgroud)
引用手册
要指定布尔文字,请使用常量TRUE或FALSE.两者都不区分大小写.
另请阅读您拥有的其他选项
转换为布尔值时,以下值被视为FALSE:
◦布尔
值为FALSE本身◦整数0(零)
◦浮点数0.0(零)
◦空字符串,字符串"0"
◦包含零元素的数组
◦一个零成员变量的对象(仅限PHP 4)
◦特殊类型NULL(包括未设置的变量)
◦从空标签创建的SimpleXML对象
然后你观察到了这一点
同时,当使用1和0时if语句正常工作而不是true和false.为什么会这样?
这是因为任何形式的0都是FALSE,无论是字符串还是数字.但false
由于上述原因,作为字符串的文本不是假的.
自从你学习以来,还阅读有关PHP Strict Comparisons的内容,因为
var_dump(0==FALSE); //bool(true)
var_dump(0===FALSE); //bool(false) :)
Run Code Online (Sandbox Code Playgroud)
PHP在if表达式中做了一些偷偷摸摸的事情.以下值被视为FALSE:
每个其他值都被视为TRUE(包括任何资源).
你实际上是在传递一个字符串,表示单词false,而不是false本身.因为这不在上面的列表中,它实际上被认为是真的!