将字符串与零进行比较怎么可能是真的


How can comparing string to zero be true?

php -a
Interactive shell
php > var_dump("some" == 0);
bool(true)
php > var_dump("some" == false);
bool(false)
php > var_dump("some" == true);
bool(true)
php > var_dump(false == 0);
bool(true)

我的问题很简单。("some" == 0) === true背后的原因是什么?我知道由于弱类型,操作数被转换为可比的东西。但在这个特殊的例子中,它违背了我的理解。

如果将零转换为字符串,它将是:

php > var_dump("some" == "0");
bool(false)

如果将其转换为布尔值,它将是:

php > var_dump("some" == false);
bool(false)

唯一合理的解释是:

php > var_dump(intval("some"));
int(0)
php > var_dump(intval("some") == 0);
bool(true)

但这肯定不是我或任何人所期望的。特别是因为任何字符串都会变成零(这可能意味着在任何比较中都是假的(。

为什么会这样?

更新:

我的问题更多的是关于"为什么"而不是"如果"或"如何",对不起,如果这不是很明显。我想我在为什么 PHP 在 [松散] 比较它们之前将两个数字字符串转换为数字中找到了答案?

简单

php > var_dump("some" == 0);

字符串"some"被强制转换为整数以与整数进行比较,在这种情况下将转换为0

0 == 0是真的

如果将字符串"13 monkeys"转换为整数,则值为 13

php > var_dump("13monkeys" == 0);

13 == 0是假

将字符串转换为数字的规则在 PHP 文档中进行了解释