如果(0 == '%'),那么为什么Php不能合理地比较事物?

5

我刚刚将一个疯狂的错误简化为这个问题标题中的内容。我相信Php认为0 == '%'(或任何其他特殊字符)有一个完全合理的解释。我想在StackOverflow上得到这个解释!


1
https://dev59.com/p3NA5IYBdhLWcg3wpvtg - Mike B
这就是为什么我写PHP和写C++的方式几乎一样的原因。 ;) - Teekin
5个回答

7
它会将任何字符串做同样的处理,将非数字字符串转换为整数时,始终返回 0。

这就是为什么(除了许多其他疯狂的事情),PHP甚至不应被视为真正的“编程语言”的原因。 - slashCoder

6
使用 '==='(用于精确、字面比较 -- 值必须是相同类型且相等的)而不是 '==' 可以解决这个问题。使用 '==' 时,它会尝试将 '%' 转换为数字,0 是最好的选择。

1
如果您使用 ===,请注意 $x = '0'; var_dump($x === 0) 将返回 false($x 是字符串,0 是整数) :) - Goran Rakic

1

如果严格比较运算符不直接适用,如果您希望将两个值作为字符串进行比较,则可以使用strcmp()函数。一个例子可能是两个值都是变量,类型可能是字符串或整数。与强制转换为字符串然后使用严格相等检查相比,strcmp()可以更简洁。

php的类型强制转换非常方便。但是,如果您不了解它的许多规则(有些可能会产生影响),您应该尽量避免使用它。请参见http://www.php.net/manual/en/types.comparisons.php


0

因为'%'不是真的,所以它应该是假的(0),所以当然0=='%'

;-) 虽然很有趣


它不会将字符串转换为布尔值,另一个操作数是整数而不是布尔值。 - Goran Rakic

0

这是因为它将“%”转换为数字并且结果为0。

然而,PHP将字符串转换为数字的方式在我看来纯粹是邪恶的,因为非数字字符串不一定会导致结果为零。

如果以数字开头,则php将返回它可以找到的第一个数字,并忽略字符串的其余部分。所以:

"2 times 5 equals 10"

当转换为数字时,将会得到2。

文档中的文章


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接