PHP 为啥 0=='all' 为真? [复制]

Posted

技术标签:

【中文标题】PHP 为啥 0==\'all\' 为真? [复制]【英文标题】:PHP why is 0=='all' true? [duplicate]PHP 为什么 0=='all' 为真? [复制] 【发布时间】:2018-11-23 21:07:47 【问题描述】:

我正在阅读布尔值的 php 文档。

其中一个 cmets 说 0=='all' 为真。

http://php.net/manual/en/language.types.boolean.php#86809

我想知道它是如何变成真的。

文档说所有非空字符串都是真的,除了 '0'。

所以“所有”都是真的 和 0 为假。

false == true 应该是假的。

但是:

if(0=='all')
    echo 'hello';
else
   echo 'how are you ';

打印“你好”。

【问题讨论】:

使用了类型推断,导致表达式比较假和假。 【参考方案1】:

由于左操作数是一个整数,php 尝试将第二个整数转换为整数。因此,当字符串的整数表示为零时,您将得到一个 true 返回。 如果您切换运算符,您将获得相同的结果。

正如 Bhumi 所说,如果您需要这种比较,请使用 ===

【讨论】:

【参考方案2】:

在 PHP 中,运算符 == 和 != 不比较类型。因此 PHP 会自动将 'all' 转换为整数,即 0。

echo intval('all');

您可以使用 === 运算符来检查类型:

if(0 === 'all')
    echo 'hello';
else
   echo 'how are you ';

查看Loose comparisons 表。

【讨论】:

【参考方案3】:

如果你将一个字符串作为条件放在一个 IF 语句中,它会被检查为不为空或'0',但如果你将它与一个整数(==、、...)进行比较,它会被转换为0 个整数值。

if('all')
    echo 'this happens!';
if('all'>0 || 'all'<0)
    echo 'this never happens!';

【讨论】:

以上是关于PHP 为啥 0=='all' 为真? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥PHP传递参数值为0时,empty判断参数为真

为啥 (13 / 3 == 4) 为真? [复制]

为啥 `bool` 的结果在这里为真? [复制]

即使路径不存在,为啥 Path(...).exists 为真? [复制]

为啥 (new Date() == new Date()) 为假,但 (Date() == Date()) 为真? [复制]

为啥“someString”== 0 在 PHP 中评估为 true [重复]