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

问题描述 投票:1回答:4

是否有任何方法可以简化此代码,以免需要跳过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;
}

我在功能上没有问题,但是我想要一个更清洁的解决方案来打开可选变量,有什么方法可以实现?谢谢!

php switch-statement isset
4个回答
2
投票

您无需将变量设置为“默认”。如果未设置变量或变量的值与所有其他定义的情况不同,则将执行默认情况。但是请记住:如果未设置变量,而您在开关中使用了该变量,则会收到通知“ Notice:Undefined variable”。因此,如果您不想禁用通知,则必须检查变量是否已设置。


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上就足够了


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;
    }
}

-1
投票

default案例是一个包罗万象的案例,如果没有找到前面的案例,因此无需检查变量是否已设置并将其分配给"default"


-1
投票

对于switch语句,默认意味着未列出该值...因此您的$ 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";
}

缺少半冒号。

© www.soinside.com 2019 - 2024. All rights reserved.