2012-08-23 13 views
0

所以,我想有更好的理解,当阵列未设置开关将如何行动,如果我应该使用isset()和/或default:行为的PHP开关阵列时没有设置

例如,目前我正在使用的代码:

$parameters['sort'] = NULL; 

if(isset($parameters['sort'])) { 

    switch($parameters['sort']) 
    { 
     case 'relevance': 
      $parameters['sort'] = 'rating'; 
     break; 
     case 'published': 
      $parameters['sort'] = 'updated'; 
     break; 
     case 'views': 
      $parameters['sort'] = 'viewCount'; 
     break; 
    } 

} 

注:我知道break;没有右缩进(应该是如下),但它是我喜欢如何switch()使用它。

注2:我只是回顾我的代码来修复bug和改进,同时使得如何东西要正确实现更好的感觉/使用

case 'relevance': 
     $parameters['sort'] = 'rating'; 
     break; 

所以我的问题是,我要补充的额外default并删除if()或继续使用if(),因为它没有造成任何问题?使用两者都没有任何意义!

default: 
     $parameters['sort'] = ''; 
    break; 

回答

1

default选择将在检查所有以前的比较后选择。如果默认是最常见的选择,代码将被大量执行,我认为您应该坚持if子句,并且您不必信任任何自动优化来节省处理器时间。

+1

确定下来,这就是我正在寻找的内容,并且具有正确的逻辑我错过了。非常感谢您分享您的知识 – Alex

0

这是个人喜好,但我会亲自去除if语句并将默认值添加到交换机中。

这背后的主要原因是因为如果你像刚才那样使用它(和if语句),并且$parameters['sort']等于你在开关中定义的3以外的东西,那么你将遇到问题。而如果定义了默认值,那么在这些情况下,它总是知道默认的内容。

+0

这是什么意思,如果我认为它会和其他东西一样有问题,那么'switch()'里面的内容就像我看到的那样......它没有逻辑,我从来没有这样的问题。如果'$ parameters ['sort'] ='ten_years_ago';',那么就没有问题了,只要使用该值,我将变量 – Alex

1

那么,问题是,如果在任何情况下都找不到价值,您是否希望这样做。 如果你不这样做,那么你可以跳过默认情况,但是如果有东西要做,即使没有指定值,那么就使用默认情况。
但我必须说,使用默认情况是很好的做法,至少记录错误/未指定的用法或打印错误屏幕。

+0

好的,我明白了..感谢您分享您的意见 – Alex