php 运算符 ==(有点相等)和整数 0

标签 php equality comparison-operators

php,我最亲爱的老 friend 。

好的,所以我可以理解为什么字符串“0”会是一个假值。这很公平,因为 '0' 与松散类型语言中的 0 相同,而 0false 在松散类型的语言中。所以这给出了 false == 0 == '0'

很好很好......但是!这是怎么回事?

<?php
    print "number of surprised persons: " . ('false' == 0);

输出是....

number of surprised persons: 1

这怎么合理?我是唯一对此感到惊讶的人吗?我没看到什么?

进一步的测试证明整数 0 等于(通过运算符 ==)

0        <-- integer
false    <-- boolean
null     <-- just.. you know, null
'0'      <-- string
''       <-- string
'false'  <-- string
'true'   <-- string
'null'   <-- string

当然,我主要使用运算符 === 来比较东西。既然我知道了这一点,我当然必须调整我的程序,毫无疑问。但仍然!有人可以阐明 pl0x 吗?

最佳答案

这是因为,当您将字符串与整数进行比较时,它们不会同时转换为字符串或 bool 值 - 它们会转换为整数。对于 PHP,当您考虑它时,这一点都不奇怪(我想是相对而言)。

'true' == 0
// is the same as
(int)'true' == 0
// is the same as
0 == 0
// is the same as
true

对于任何非数字字符串以及字符串 "0" 都是如此。之所以打印出1是因为true的字符串版本是1(而false的字符串版本是空字符串)。

关于php 运算符 ==(有点相等)和整数 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7744879/

相关文章:

php - 在 mysqli 查询中使用 COUNT 时的最佳比较运算符

php - Wordpress 联系表 7 向用户发送确认消息

javascript - 如何对具有不同 id 的输入类使用一个函数

c# - 当装箱类型未知时检查不同类型的装箱值类型是否相等

c++ - 非空原始指针和 nullptr 之间的运算符小于

sql - 是否有与 SQLite 的 IS 运算符等效的 PostgreSQL?

php - 如何使用 PHP 将 YouTube 嵌入插入 MySQL 并再次检索

php - 从 GPS 获取当前标记位置并保存到 mySQL

python - 当字符串中有一个点时,为什么 "is"关键字有不同的行为?

scala - 是否有一种 API 方法可以不考虑顺序来比较 Seq 的内容?