function x() {return -1;}
echo x();
echo "<br>";
if(x()) {echo "True";} else {echo "False";}
输出:
-1
True
为什么我得到“真”输出,if()
测试肯定会失败,因为它是负面的?
function x() {return -1;}
echo x();
echo "<br>";
if(x()) {echo "True";} else {echo "False";}
输出:
-1
True
为什么我得到“真”输出,if()
测试肯定会失败,因为它是负面的?
那是因为你只能测试真假。
False 定义为0
,而 true 定义为not 0
。与 1、2、3 等-1
一样多。true
为确保您得到正确的结果,请进行真正的比较。
-1
TRUE
在布尔上下文中考虑。请参阅PHP 手册中的转换为布尔值。
在 PHP 中只有数字 0 值是假的:http: //php.net/manual/en/language.types.boolean.php
0 为假,其他一切为真。这就是为什么 !
在 PHP 中 a-1
是真的,因为它不是0
。使用真实的比较,例如:
if(x() <= 0) { ...do stuff... }
看看这里:
var_dump(x()); //output: int(-1)
并转换为布尔值:
var_dump((bool)x()); //output: bool(true)
-1
不在false
PHP 中。你可以看看是> 0
不是
所有的 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