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 文档中进行了解释