未设置数组时php开关的行为


Behaviour of php switch when array not set

因此,我试图更好地了解在未设置数组时开关的操作方式,以及我是否应该使用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;

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

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

这是我个人的偏好,但我个人会删除if语句并在开关中添加默认值。

这背后的主要原因是,如果您像刚才一样使用它(使用if语句),并且$parameters['sort']等于您在交换机中定义的3以外的值,那么您就会遇到问题。然而,如果定义了默认值,那么在这些情况下,它总是知道默认为什么。