php的switch函数的陷阱

时间: 2010-8-04 - 分类: PHP - 评论: 4 - 阅读: 1,104 次


if(empty($reportCatid)||$reportCatid == 176){
$reportCatid = '177,178,179,180';
}

switch($reportCatid){
case 177:
$reportName.=' - 福房指数';
break;
case 178:
$reportName.=' - 二手房指数';
break;
case 179:
$reportName.=' - 每日交易数据';
break;
case 180:
$reportName.=' - 综合数据分析';
break;
}

猜猜结果如何。

4 个评论

  1. pestd - 2011年6月11日 9:44 上午

    PH这样的问题太多了,一不小心就中招。

  2. fangyuqiang - 2010年9月1日 4:52 下午

    @兰林 呵呵,说得很详细了。没错。。当时就觉得好像有点问题,总是显示默认的第一个case,后来才发现自动类型转换的陷阱~

  3. 兰林 - 2010年8月31日 11:03 上午

    呵呵,这是因为PHP是弱类型的原因
    它会自动根据你的需要转换类型
    这是他的优点,但是也是缺点
    你的 case 后面跟的是一个 整数
    所以,PHP在比较值的时候,会将$reportCatid首先转换为整数
    然后对比
    ’177,178,179,180′ 转换之后就是177
    就是说,永远都是177
    如果你的目标是字符串比较
    应该在case后对数字加上引号,使其由int型变为string型

  4. snowball - 2010年8月23日 11:29 上午

    好文,受教了

发表评论