【问题标题】:Behaviour of php switch when array not set未设置数组时 php 开关的行为
【发布时间】:2012-08-19 00:08:54
【问题描述】:

所以,我试图更好地了解 switch 在未设置数组时的行为方式以及是否应该使用 isset() 和/或 default:

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

$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:我只是在审查我的代码以修复错误并改进它,同时更好地了解应该如何正确实施/使用事情

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

所以我的问题是,我应该添加额外的default 并删除if() 还是继续使用if(),因为它没有引起任何问题?两者都使用没有任何意义!

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

【问题讨论】:

    标签: php optimization switch-statement default-value


    【解决方案1】:

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

    【讨论】:

    • 好的,这就是我一直在寻找的东西,并且其中包含我所缺少的正确逻辑。非常感谢您分享您的知识
    【解决方案2】:

    嗯,问题是如果在任何情况下都找不到价值,你是否想做。 如果你不这样做,那么你可以跳过默认大小写,但是如果即使没有指定值也有事情要做,那么使用默认大小写。
    但我必须说,使用默认情况是一种很好的做法,至少将错误/未指定的用法或打印错误记录到屏幕上。

    【讨论】:

      【解决方案3】:

      这是个人喜好,但我个人会选择删除 if 语句并将默认值添加到 switch 中。

      这背后的主要原因是,如果您像刚才一样使用它(使用 if 语句),并且 $parameters['sort'] 等于您在 switch 中定义的 3 以外的其他值,那么您将拥有问题。而如果定义了默认值,那么在这些情况下,它将始终知道默认值是什么。

      【讨论】:

      • 你的意思是说如果它等于其他东西我会遇到问题然后switch() 里面的东西,正如我所看到的......它没有逻辑,我从来没有有这样的问题。如果 $parameters['sort'] = 'ten_years_ago'; ,根本没有问题,它只会使用我调用变量的那个值
      猜你喜欢
      • 1970-01-01
      • 2019-06-24
      • 2011-07-23
      • 2012-12-31
      • 2016-12-08
      • 1970-01-01
      • 2013-11-06
      • 2017-09-07
      • 1970-01-01
      相关资源
      最近更新 更多