function x() {return -1;}
echo x();
echo "<br>";
if(x()) {echo "True";} else {echo "False";}
输出:
-1
True
为什么输出'True',if()
测试肯定会失败,因为它是否定的?
答案 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)
-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