PHP中的逻辑,为什么会发生这种情况?

时间:2013-04-22 15:18:14

标签: php

function x() {return -1;}
echo x();
echo "<br>";
if(x()) {echo "True";} else {echo "False";}

输出:

-1
True

为什么输出'True',if()测试肯定会失败,因为它是否定的?

8 个答案:

答案 0 :(得分:7)

那是因为你只能测试真假。

False定义为0,而true定义为not 0。因此,-1与1,2,3等一样true

为了确保您获得正确的结果,请进行真正的比较。

答案 1 :(得分:5)

在布尔上下文中,

-1被视为TRUE。请参阅PHP手册中的Converting to boolean

答案 2 :(得分:4)

PHP中只有数字0值为false:http://php.net/manual/en/language.types.boolean.php

答案 3 :(得分:0)

0是假的,其他一切都是真的。那就是原因!

答案 4 :(得分:0)

在PHP中,-1为真,因为它不是0。使用真实的比较,如:

if(x() <= 0) { ...do stuff... }

答案 5 :(得分:0)

看看这里:

var_dump(x()); //output: int(-1)

并转换为布尔值:

var_dump((bool)x()); //output: bool(true)

PHP中的{p> -1不是false。你可以查看它是> 0吗?

答案 6 :(得分:0)

所有0都是假的,其他一切都是真的。 Wikipedia article about it

答案 7 :(得分:0)

在PHP中转换为布尔值

要将值显式转换为boolean,请使用(bool)或(boolean)强制转换。但是,在大多数情况下,转换是不必要的,因为如果运算符,函数或控件结构需要布尔参数,则会自动转换值。

另见Type Juggling。

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

布尔值FALSE本身 整数0(零) 浮点数0.0(零) 空字符串,字符串“0” 一个零元素的数组 一个零成员变量的对象(仅限PHP 4) 特殊类型NULL(包括未设置的变量) 从空标签创建的SimpleXML对象 每个其他值都被视为TRUE(包括任何资源)。

警告 -1被认为是TRUE,就像任何其他非零(无论是负数还是正数)一样!

来源http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting