You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中switch/case与if/else运行结果不一致 求解fun1(0)返回异常原因

问题原因分析

PHP中的switch语句会将switch()括号内的基准值,依次与每个case后表达式的返回值做松散比较(==,不校验数据类型),匹配到第一个符合条件的case后就会执行对应代码块,直到遇到break终止。

fun1(0)的执行逻辑完全符合该规则:

  1. 传入参数$interval = 0,switch($interval)设定基准值为整数0
  2. 第一个case表达式$interval <= 45运算结果为布尔值true,执行比较0 == true,松散比较下结果为false,匹配失败,继续向下判断
  3. 第二个case表达式(90 <= $interval) && ($interval <= 100)运算结果为布尔值false,执行比较0 == false,松散比较下结果为true,匹配成功,因此执行该case下的赋值逻辑,最终返回1

fun2的if/else逻辑是直接判断每个表达式本身的布尔值是否为真,不存在额外的基准值比较步骤,因此运行结果和预期完全一致。

修复方案

如果要使用switch实现和if/else完全一致的判断逻辑,只需将switch($interval)修改为switch(true)即可。修改后switch的基准值为布尔值true,会依次匹配第一个返回true的case表达式,和if判断逻辑完全对齐:

function fun1(int $interval)
{
    $retVal = -10;
    switch (true) {
        case ($interval <= 45):
            $retVal = 5;
            break;
        case ((90 <= $interval) && ($interval <= 100)):
            $retVal = 1;
            break;
    }
    return $retVal;
}

内容的提问来源于stack exchange,提问作者Wakan Tanka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:06:03