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

PHP中的逻辑,为什么会发生这种情况?,php,Php,为什么要输出'True',肯定if()测试会失败,因为它是阴性的?-1在布尔上下文中被视为True。请参阅PHP手册。在PHP中只有数字0值为false:这是因为您只能测试true或false False定义为0,而true定义为而非0。所以-1与正确的相当于1、2、3等 为了确保得到正确的结果,请进行真正的比较。0为假,其他一切为真。这就是为什么 在PHP中,-1是正确的,因为它不是0。使用真实的比较,如: -1 True if(x()看看这里: var_dump(x());//输出:int

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

-1
在布尔上下文中被视为
True
。请参阅PHP手册。

在PHP中只有数字0值为false:

这是因为您只能测试true或false

False定义为
0
,而true定义为
而非0
。所以
-1
正确的
相当于1、2、3等


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

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

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

-1
True
if(x()看看这里:

var_dump(x());//输出:int(-1)

并强制转换为布尔值:

var_dump((bool)x());//输出:bool(true)


-1
在PHP中不是
false
。您可以检查它是否是
>0

所有0都是false,其他都是true。

在PHP中转换为布尔值

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

另请参见键入杂耍

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

布尔值本身是假的 整数0(零) 浮动0.0(零) 空字符串和字符串“0” 零元素数组 具有零成员变量的对象(仅限PHP 4) 特殊类型NULL(包括未设置的变量) 从空标记创建的SimpleXML对象 其他所有值均视为真(包括任何资源)

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


Source

那么我怎样才能只测试阳性结果呢?@Chud37
if(x()>0)
应该可以帮你解决这个问题。
if(x()>=0)
如果您还想检查0(包括0)。我的另一个函数要么返回负数,要么返回字符串。所以我可以只返回字符串吗?您不应该在单个函数中返回不同的类型。如果您返回FALSE或int/string,也可以,但您永远不应该返回int或string。
-1
True
if(x() <= 0) { ...do stuff... }