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' 为真? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
即使路径不存在,为啥 Path(...).exists 为真? [复制]
为啥 (new Date() == new Date()) 为假,但 (Date() == Date()) 为真? [复制]