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)
如果它被转换为bool,那将是:
php > var_dump("some" == false);
bool(false)
只有明智的解释是:
php > var_dump(intval("some"));
int(0)
php > var_dump(intval("some") == 0);
bool(true)
但那肯定不是我或任何人所期望的。特别是因为任何字符串都会变为零(这在任何比较中都可能意味着错误)。
为什么会这样?
更新
我的问题更多的是关于"为什么"不是"如果"或"如何",对不起,如果那不是很明显。我想我在Why PHP casts two numerical strings to numbers before [loosely] comparing them?
找到了答案答案 0 :(得分:3)
Simples
php > var_dump("some" == 0);
字符串" some"被强制转换为整数以与整数进行比较,在这种情况下将被强制转换为0
。
0 == 0
是真的
如果字符串" 13只猴子"被强制转换为整数,它的值为13
php > var_dump("13monkeys" == 0);
13 == 0
是假的