If statement If()与switch()-意思相同但行为不同?
我想将if()条件转换为switch(),如下所示:If statement If()与switch()-意思相同但行为不同?,if-statement,switch-statement,If Statement,Switch Statement,我想将if()条件转换为switch(),如下所示: if($configuration['application'][$applicationName]['subdomain'] == true){ foreach($configuration['language'] as $language){ if($language['abbreviation'].'.'.$configuration['application'][$applicationName]['domai
if($configuration['application'][$applicationName]['subdomain'] == true){
foreach($configuration['language'] as $language){
if($language['abbreviation'].'.'.$configuration['application'][$applicationName]['domain'] == $_SERVER['HTTP_HOST']){
$_SESSION['language'] = $language['abbreviation'];
}
}
// If no subdomain detected and redirection is enabled, set default language
if(!isset($_SESSION['language'])){
$_SESSION['language'] = $configuration['application'][$applicationName]['language'];
}
}
else {
$_SESSION['language'] = $configuration['application'][$applicationName]['language'];
}
为此:
switch($configuration['application'][$applicationName]['subdomain']){
case true:
foreach($configuration['language'] as $language){
if($language['abbreviation'].'.'.$configuration['application'][$applicationName]['domain'] == $_SERVER['HTTP_HOST']){
$_SESSION['language'] = $language['abbreviation'];
break;
}
}
default:
$_SESSION['language'] = $configuration['application'][$applicationName]['language'];
break;
}
我认为它应该是一样的,但它的行为不同。。。
开关工作不正常…我已重新格式化了您的代码,请检查以确保它仍然正确
至于你的问题,首先你缺少了一个
中断您的大小写true:
语句末尾的code>语句。(foreach
循环中的中断
只是从该循环中断,而不是案例本身)。我已重新格式化了您的代码,请检查以确保它仍然正确
至于你的问题,首先你缺少了一个中断您的大小写true:
语句末尾的code>语句。(foreach
循环中的中断
只是从该循环中中断,而不是案例本身)。在$configuration['application'][$applicationName]['subdomain']中存储的数据类型是什么?它真的是布尔型的,还是存在某种字符串或整数,在if
版本中隐式地转换为布尔型的?您使用的特定编程(PHP?)在这里可能很重要;另外,还描述了它的行为到底是如何不同的(添加到foreach
循环的break
是否会导致您的预期行为发生变化?)。我使用的是php,$configuration['application'][$applicationName]['subdomain']是布尔型的(从.ini读取并键入bool)。。。问题是foreach中的代码被执行,默认值也被执行(break并没有真正中断开关?)在$configuration['application'][$applicationName]['subdomain']
中存储了什么类型的数据?它真的是布尔型的,还是存在某种字符串或整数,在if
版本中隐式地转换为布尔型的?您使用的特定编程(PHP?)在这里可能很重要;另外,还描述了它的行为到底是如何不同的(添加到foreach
循环的break
是否会导致您的预期行为发生变化?)。我使用的是php,$configuration['application'][$applicationName]['subdomain']是布尔型的(从.ini读取并键入bool)。。。问题是,foreach中的代码被执行,默认值也被执行(break并没有真正中断开关?)这很有趣,我认为break应该退出开关(我认为这是在c++中完成的方式)。。。我的意图是,如果会话设置为true case,它应该退出开关,否则它应该继续使用默认case,然后执行中断…我刚刚发现问题在于foreach循环中的中断。它就是不起作用。。。在if语句中设置会话后,它将继续默认设置并再次设置会话,这就是问题所在。@jzvelc:yep,这就是为什么我提到您需要另一个中断代码>语句,否则您将陷入下一个条件:)是的,但我的观点是,foreach中的id条件失败,它应该继续默认,否则不会(或者如果配置设置为false)好吧,这很有趣,我认为break应该退出开关(我认为这是在c++中完成的方式)。。。我的意图是,如果会话设置为true case,它应该退出开关,否则它应该继续使用默认case,然后执行中断…我刚刚发现问题在于foreach循环中的中断。它就是不起作用。。。在if语句中设置会话后,它将继续默认设置并再次设置会话,这就是问题所在。@jzvelc:yep,这就是为什么我提到您需要另一个中断代码>语句,否则您将陷入下一个条件:)是的,但我的观点是foreach中的id条件失败,它应该继续默认,否则不会(或者如果config设置为false)