今天我在代码上看到了一个奇怪的错误。 我有一个开关与case进行比较,如果我的变量等于null或''它将始终出现在第一种情况。
我的代码:
$sHost = filter_input(INPUT_SERVER, 'HTTP_HOST');
switch($sHost){
// Local
case strpos($sHost, "dev.localhost") !== false: $this->_sEnv = 'local';
break;
// Prod
default: $this->_sEnv = 'production';
break;
}
在if语句上它是可行的,但在切换案例中它不起作用,我不知道为什么......也许是PHP问题?有没有人有类似的错误?
$ sHost可以为null,因为有时我会用批处理来运行脚本。
if(strpos($sHost, "dev.localhost") !== false){
// Nothing
}
else{
return false;
}
当然我可以在切换之前做一个if is_null,但我想明白为什么它会像那样工作..
编辑:我忘了说我的开关有5个案例,有一个案例是环境
感谢您将来的回答:)
答案 0 :(得分:2)
如果$sHost
等于null
或'',则第一个切换案例始终为true
,因为
var_dump($sHost == (strpos($sHost, "dev.localhost") !== false));
是真的。 How switch work。 你可以这样做:
switch(true) {
// Local
case strpos($sHost, "dev.localhost") !== false:
$this->_sEnv = 'local';
break;
// Prod
default:
$this->_sEnv = 'production';
break;
}
答案 1 :(得分:1)
switch(strpos($sHost, "dev.localhost")){
// Local
case -1: $this->_sEnv = 'production';
break;
// Prod
default: $this->_sEnv = 'local';
break;
}
@Leggendario,好点,修正了上面。