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

输出:

-1
True

为什么我得到“真”输出,if()测试肯定会失败,因为它是负面的?

4

8 回答 8

7

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

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

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

于 2013-04-22T15:19:54.663 回答
5

-1TRUE在布尔上下文中考虑。请参阅PHP 手册中的转换为布尔值。

于 2013-04-22T15:19:40.217 回答
4

在 PHP 中只有数字 0 值是假的:http: //php.net/manual/en/language.types.boolean.php

于 2013-04-22T15:19:48.647 回答
0

0 为假,其他一切为真。这就是为什么 !

于 2013-04-22T15:20:55.090 回答
0

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

if(x() <= 0) { ...do stuff... }
于 2013-04-22T15:21:13.763 回答
0

看看这里:

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

并转换为布尔值:

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

-1不在falsePHP 中。你可以看看是> 0不是

于 2013-04-22T15:21:22.243 回答
0

所有的 0 都是假的,其他的都是真的。维基百科关于它的文章

于 2013-04-22T15:21:43.633 回答
0

在 PHP 中转换为布尔值

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

另请参阅类型杂耍。

转换为布尔值时,以下值被视为 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

于 2013-04-22T15:21:54.107 回答