我有个问题想知道答案,为什么以下代码将打印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.17Theanks。
正在进行此比较:
0 == 'A'
PHP将字符串强制转换为整数。这导致字母A变为零,因为它不代表数字。
因此:
0 == 0
这种情况符合开关,因此被执行。非常违背直觉,但这是PHP类型系统的工作方式,不幸的是,从技术上讲,这不是一个bug。
你可以通过把$i
变成这样的字符串来解决这个问题:
switch ((string) $i) {
或者,如果可以的话,只需将其初始化为字符串:
$i = '0';
实际情况是(int(0等于(string(A。
尝试将$i = 0;
更改为$i = '0';
,它应该可以正常工作。
$i是一个整数,您将其与字符串进行比较。PHP会将该字符串('A'(类型转换为一个整数,这使得它实际上也是0,所以是的。。。在PHP领域,'A' == 0
为TRUE。
try:
<?php
$i = 0;
if ($i == 'A')
{
echo 'woo';
}
并访问此href:http://php.net/manual/en/control-structures.if.php
这应该可以工作。您应该将in转换为字符串,就像在case中切换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";
}
?>