2015-06-23 114 views
7

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

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

和输出是true当条件是true。再次,当条件是falseif(false))时,其回声false

但我试过同样的,使用变量作为条件,同时改变变量的值。

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

在这种情况下,输出是true即使当变量值为falsetrue。与此同时,使用10代替truefalse时,if statement工作正常。这是为什么发生?

+4

'假'=假 – Prasanth

+2

所以..很多..答案值:O! – Luke

回答

6

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

  • 布尔值FALSE
  • 整数0(零)
  • 浮子0.0(零)
  • 空字符串,字符串 “0”
  • 具有零个元素的数组
  • 零个成员变量(PHP 4只)
  • 特殊类型NULL(包括尚未设定的变量)
  • 的对象
  • 从空标记创建的SimpleXML对象

每个其他值都被视为TRUE(包括任何资源)。

实际上,你传递的是一个字串,表示单词false,而不是false本身。因为这不在上面的列表中,所以它被认为是真的!

+3

那里有什么鬼鬼祟祟的? –

+0

我是强打字的粉丝:) – Luke

+0

谢谢。很好地解释! – DScript

9
$con='false'; 

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

$con=FALSE; //this is false now 

要从Manual

报价要指定一个布尔值,使用常量TRUE或FALSE。两者都不区分大小写。

此外读取您有

当转换为布尔值,下面的值被认为是FALSE这些选项:

◦布尔值FALSE
◦整数0(零)
■浮点数0.0(零)
■空字符串和字符串“0”
■具有零元素的数组
◦零个成员变量(PHP 4只)
◦特殊类型NULL(包括尚未设定的变量)从空标签

创建
◦SimpleXML的对象的对象然后就观察到了这种

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

这是因为任何形式的0都是FALSE,无论是字符串还是数字。但文字false作为一个字符串是不是因为上述原因而错误。

也了解PHP Strict Comparisons,因为你在学习,因为

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

你可以这样

$con=false; 
2

'false'赋给变量值不一样false

if('true')if('false')将导致true总是因为它们将被视为string S和将被转换以进行比较。

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

将打印false

2

在你的第二个例子,$con不是布尔false,这是一个字符串字面'false'(注意引号),而在PHP任何非空字符串作为计算true

为了解决这个问题,只是下降的行情:

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

使用,而不是一个串一个布尔值:

$con = false; 

你的if语句会简单地检查$ con是不是空的,所以在你的例子永远是真的。

+0

“由于PHP 5.3”?在最近的历史中,布尔比较没有任何改变。 – deceze

+0

@deceze我认为PHP检查一个字符串是否是这样的字符串是在PHP 5.3中引入的,我会把它带出来消除任何混淆。 –

3

如关于表达式的部分所述,表达式评估为其布尔值。如果表达式的计算结果为TRUE,PHP将执行语句,并且如果计算结果为FALSE - 它将忽略它。在'Converting to boolean'部分中可找到有关什么值评估为FALSE的更多信息。

所以按照文档尝试使用

$con = false;//boolean and not a string 
if($con){echo 'true';} else{echo 'false';} 

当转换为布尔值,下面的值被认为是FALSE:

◦布尔值FALSE
◦整数0(零)◦浮点数0.0(零)
◦空字符串和字符串“0”
◦用零个元素
◦零个成员变量(PHP 4只)
◦特殊类型NULL(包括尚未设定的变量)
◦从空标签

Check Docs (IF MANUAL)创建的SimpleXML对象的对象的阵列

2

您的$ con声明是一个字符串而不是bool。所以它将永远回报真实。 要声明一个布尔值,使用:

$con=FALSE; //or TRUE 
3

您正在使用“假”为STRING变量,但毕竟是WORD假的,不是布尔不变。只需使用

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!'; } 
1

变化的变量来此

$con = false;