文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP中实用的开关命令

2023-10-22 10:32

关注

确保 PHP 中结构良好的 Switch 命令

在 PHP 中,switch语句是控制程序流程的强大工具,尤其是在处理多个条件分支时。然而,实现干净高效的转换也有其自身的障碍。这篇文章探讨了检查“switch”命令质量的基本技巧和实践,以确保代码质量并优化其性能。

缺少默认条目

首先要考虑的是该switch声明是否包含default案例。Adefault充当后备选项,确保在没有定义的case匹配项时执行代码。

default应始终存在。事实上,命令match是 的替代版本switch,当它无法匹配任何case, 并且default缺少 时,它会引发异常。

<?php
switch($a) {
    case 0:
      echo 'A';
      break;
       
    case 1:
      echo 'A';
      break;
}
 
?>

default服务于不同的目的:

<?php
switch($a) {
    case 0:
      echo 'A';
      break;
       
    case 1:
      echo 'A';
      break;
       
    default:
      throw new MyException('This should be zero or one');
}
 
?>

始终确保交换机有默认值。

重复案例

检查switch陈述中是否有重复案例是有回报的。PHP 只处理它遇到的第一种情况,忽略其他情况。这会导致死代码,开关中的一些分支将被忽略并且永远不会被使用。

<?php
switch($a) {
    case 'gif':
        // doSomething() and break
       
    case 'jpeg':
    case 'jpg':
        // doSomething() and break
 
    case 'png':
        // doSomething() and break
 
    case 'gif':
        // doSomething() and break
       
    default:
      throw new MyException('This should be an image format');
}
 
?>

重复的情况经常发生在很长的案例列表中。

当实际值被常量名称或 PHP 的类型杂耍隐藏时,也会发生这种情况。确实,switch使用了宽松的比较风格,有些文字实际上可能是相同的。

<?php
 
// $a in [null, false, '', 0]
switch($a) {
    // Most of the cases ends here, except 0
    // because it is the first encountered
    case '':
        print 'Empty string';break;
 
    // 0 goes here
    case 0:
        print 'Zero';break;
       
    case false:
        print 'false';break;
 
    case null:
        print 'null';break;
       
    default:
      throw new MyException('This should be empty');
}
 
?>

仔细检查案例值并删除重复项。

重复的代码块

另一个常见问题是不同 case 分支中的代码块重复。这种冗余会使您的系统变得臃肿switch,并且使将来的更新变得困难。考虑重构代码以消除重复并合并案例。

<?php
 
switch($a) {
    case 'john':
        $b = 0; break;
 
    case 'henry':
        $b = 10; break;
 
    // duplicate of case 'john'
    case 'julia':
        $b = 0; break;
 
    case 'jeroen':
        $b = 30; break;
       
    default:
      throw new MyException('This is an unexpected name');
}
 
?>

枚举案例的使用

PHP 内置了对枚举的支持。枚举的重要优点之一是其有限性。它们代表选项的完整集合,并且不存在其他选项。这使得检查 a 是否switch涵盖了所有可能的情况变得很容易。

<?php
 
enum formats {
    case GIF;
    case JPG;
    case PNG;
}
 
switch($a) {
    case formats::GIF:
        // doSomething() and break;
 
    case formats::PNG:
        // doSomething() and break;
         
    // We are missing one case : JPG!
 
    // Unknown cases triggers an exception lazily (only if reached)
    case formats::TIFF:
        // doSomething() and break;
 
    default:
      throw new MyException('Unknown image format');
}
 
?>

通过简单开关进行优化

PHP 7.2 引入了针对switch.

在此之前,PHP 会逐个检查每个案例,并在找到匹配值后立即停止。在 PHP 7.2 及更高版本中,当大小写值是简单文字时,PHP 会为它们设置一个查找表。然后,PHP 立即跳转到正确的情况,并绕过所有其他不匹配的情况。

<?php
 
switch($a) {
    case 1:
        // doSomething() and break;
 
    case 2:
        // doSomething() and break;
         
    default:
      throw new MyException('Unknown image format');
}
 
?>

当所有情况都是简单值时,就会发生简单切换,可以直接与传入变量进行比较。

如果开关混合了表达式和简单值,建议将简单文字放在第一个开关中switch,并将其他文字放在第二个开关中。

<?php
 
switch($a) {
    case 1:
        // doSomething() and break;
 
    case 2:
        // doSomething() and break;
         
    default:
        switch($a) {
            case $b + 2:
                // doSomething() and break;
 
        case strtolower($a):
            // doSomething() and break;
         
        default:
            throw new MyException('Unknown case');
    }
}
 
?>

以不同的方式处理它们也可能更方便,例如使用先前的条件。

总结

总之,switchPHP 中结构良好的语句可以极大地提高代码的清晰度、可维护性和性能。通过检查缺失的默认条目、消除重复的情况和代码块、利用类似枚举的结构以及优化复杂的开关,您可以确保您的语句仍然是switch任何 PHP 代码库的高效且有效的部分。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯