我有一个问题想知道答案, 为什么以下代码将打印A不是默认值?
$i = 0;
switch ($i) {
case 'A':
echo "i equals A"; //will printed it
break;
case 'B':
echo "i equals B";
break;
case 'C':
echo "i equals C";
break;
default:
echo "i equals other";
}
任何人都可以告诉我为什么?我真的不明白。 我的PHP版本是5.2.17 Theanks。
答案 0 :(得分:10)
这种比较正在发生:
0 == 'A'
PHP会将字符串转换为整数。这导致字母A变为零,因为它不代表数字。
因此:
0 == 0
这种情况符合开关,因此被执行。非常反直觉,但这是PHP的类型系统的工作方式,不幸的是在技术上不是一个错误。
您可以通过将$i
转换为如下字符串来解决此问题:
switch ((string) $i) {
如果可以的话,只需将其初始化为字符串:
$i = '0';
答案 1 :(得分:2)
发生的事情是(int)0等于(string)A。
尝试将$i = 0;
更改为$i = '0';
,它应该可以正常运行。
答案 2 :(得分:1)
$ i是一个整数,你要比较一个字符串。 PHP会将该字符串('A')强制转换为整数,这实际上也是0,所以是的...在PHP-land中,'A' == 0
为TRUE。
答案 3 :(得分:0)
尝试:
<?php
$i = 0;
if ($i == 'A')
{
echo 'woo';
}
答案 4 :(得分:0)
这应该可以。你应该转换为字符串,因为案例中有switch case;
<?
$i = 0;
$i = (string)$i;
switch ($i) {
case 'A':
echo "i equals A"; //will printed it
break;
case 'B':
echo "i equals B";
break;
case 'C':
echo "i equals C";
break;
default:
echo "i equals other";
}
?>