PHP开关 - 如果未设置变量,则为默认值

时间:2013-09-23 23:47:10

标签: php switch-statement isset

有没有办法简化这段代码,以避免if跳转到交换机的默认值?

我有一个用于http请求的不同身份验证方法的配置表,可以选择不将值设置为默认为普通的http请求:

if(!isset($type)) {
    $type = "default";
}

switch ($type) {
   case "oauth":
       #instantinate an oauth class here
       break;
   case "http":
       #instantinate http auth class here
       break;
   default:
       #do an unprotected http request
       break;
}

我对功能没有任何问题,但我想要一个更清洁的解决方案来打开一个可选变量,有没有办法实现这一点?谢谢!

5 个答案:

答案 0 :(得分:2)

您无需将变量设置为“default”。如果未设置变量或者与所有其他定义的案例具有任何不同的值,则将执行默认情况。 但请记住:如果未设置变量并且您在交换机中使用它,您将收到通知“通知:未定义变量”。因此,如果您不想禁用通知,则必须检查变量是否已设置。

答案 1 :(得分:2)

只是

switch ($type??'') {
    case "oauth":
        #instantinate an oauth class here
        break;
    case "http":
        #instantinate http auth class here
        break;
    default:
        #do an unprotected http request
        break;    
}

在php> = 7上就足够了

答案 2 :(得分:1)

如果您想在不通知的情况下简化它。请尝试以下方法:

if(!isset($type)) {
    #do an unprotected http request
}else{
    switch ($type) {
       case "oauth":
           #instantinate an oauth class here
           break;
       case "http":
           #instantinate http auth class here
           break;
    }
}

答案 3 :(得分:0)

如果找不到以前的案例,那么default案例就是一个包罗万象的案例,因此您无需检查变量是否设置并将其分配给"default"

答案 4 :(得分:0)

对于switch语句,default表示该值未列出...所以你的$ type =“default”可以是任何东西......或者什么都没有

仅这一点就可以了。

switch ($type) {
   case "oauth":
       #instantinate an oauth class here
       break;
   case "http":
       #instantinate http auth class here
       break;
   default:
       #do an unprotected http request
       break;
}

还要注意以下拼写错误

if(!isset($type)) {
    $type = "default"
}

应该是

if(!isset($type)) {
    $type = "default";
}

缺少半结肠。