PHP中实用的开关命令

DDD
发布: 2023-10-09 10:28:01
原创
1166 人浏览过

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

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

缺少默认条目

首先要考虑的是该switch声明是否包含default案例。Adefault充当后备选项,确保在没有定义的case语句是控制程序流程的强大工具,尤其是在处理多个条件分支时。

然而,实现干净高效的转换也有其自身的障碍。🎜🎜这篇文章探讨了检查“switch”命令质量的基本技巧和实践,以确保代码质量并优化其性能。🎜🎜🎜

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

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

<?php
switch($a) {
    case 0:
      echo &#39;A&#39;;
      break;
       
    case 1:
      echo &#39;A&#39;;
      break;
}
 
?>
登录后复制

default服务于不同的目的:

  • 将所有其他情况一并处理。这是当有限的案例列表可用时,并且该列表之外的任何事情都可以以单一方式处理。
  • 如果达到则引发错误。在这种情况下,前面的上下文switch应始终存在。事实上,命令match是 的替代版本
  • switch
,当它无法匹配任何

case, 并且default

缺少 时,它会引发异常。🎜🎜
<?php
switch($a) {
    case 0:
      echo &#39;A&#39;;
      break;
       
    case 1:
      echo &#39;A&#39;;
      break;
       
    default:
      throw new MyException(&#39;This should be zero or one&#39;);
}
 
?>
登录后复制
🎜default🎜服务于不同的目的:🎜🎜
  • 🎜🎜将所有其他情况一并处理。🎜🎜这是当有限的案例列表可用时,并且该列表之外的任何事情都可以以单一方式处理。🎜🎜🎜
  • 🎜🎜如果达到则引发错误。🎜🎜在这种情况下,前面的上下文🎜🎜switch🎜🎜可确保处理有限的案例列表。🎜🎜然后,每当合法的情况之外的情况到达命令时,就应该引发异常。🎜🎜🎜🎜
    <?php
    switch($a) {
        case &#39;gif&#39;:
            // doSomething() and break
           
        case &#39;jpeg&#39;:
        case &#39;jpg&#39;:
            // doSomething() and break
     
        case &#39;png&#39;:
            // doSomething() and break
     
        case &#39;gif&#39;:
            // doSomething() and break
           
        default:
          throw new MyException(&#39;This should be an image format&#39;);
    }
     
    ?>
    登录后复制
    登录后复制
    🎜🎜始终确保交换机有默认值。🎜🎜

    重复案例

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

    <?php
    switch($a) {
        case &#39;gif&#39;:
            // doSomething() and break
           
        case &#39;jpeg&#39;:
        case &#39;jpg&#39;:
            // doSomething() and break
     
        case &#39;png&#39;:
            // doSomething() and break
     
        case &#39;gif&#39;:
            // doSomething() and break
           
        default:
          throw new MyException(&#39;This should be an image format&#39;);
    }
     
    ?>
    登录后复制
    登录后复制

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

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

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

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

    重复的代码块

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

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

    枚举案例的使用

    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(&#39;Unknown image format&#39;);
    }
     
    ?>
    登录后复制

    通过简单开关进行优化

    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(&#39;Unknown image format&#39;);
    }
     
    ?>
    登录后复制

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

    如果开关混合了表达式和简单值,建议将简单文字放在第一个开关中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(&#39;Unknown case&#39;);
        }
    }
     
    ?>
    登录后复制

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

    总结

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

    通过检查缺失的默认条目、消除重复的情况和代码块、利用类似枚举的结构以及优化复杂的开关,您可以确保您的语句仍然是🎜🎜switch🎜任何 PHP 代码库的高效且有效的部分。🎜🎜

    以上是PHP中实用的开关命令的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!