>  기사  >  백엔드 개발  >  PHP의 실용적인 전환 명령

PHP의 실용적인 전환 명령

DDD
DDD원래의
2023-10-09 10:26:351202검색

PHP에서 스위치 명령이 잘 구조화되었는지 확인하세요.

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

缺少默认条目

首先要考虑的是该switch声明是否包含default案例。Adefault充当后备选项,确保在没有定义的case 문은 프로그램 흐름을 제어하는 ​​강력한 도구입니다. 특히 여러 조건부 분기를 처리할 때 그렇습니다.

그러나 깨끗하고 효율적인 변환을 달성하는 데는 그 자체의 장애물이 따릅니다. 🎜🎜이 문서에서는 코드 품질을 보장하고 성능을 최적화하기 위해 "스위치" 명령의 품질을 확인하는 기본 팁과 사례를 살펴봅니다. 🎜🎜🎜

🎜기본 항목 누락🎜🎜🎜🎜가장 먼저 고려해야 할 사항은 🎜switch🎜포함 여부 선언🎜기본🎜🎜케이스. 🎜🎜A🎜🎜default🎜 정의된 🎜case🎜항목이 일치하면 코드를 실행합니다. 🎜🎜

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

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

default服务于不同的目的:

  • 将所有其他情况一并处理。这是当有限的案例列表可用时,并且该列表之外的任何事情都可以以单一方式处理。
  • 如果达到则引发错误。在这种情况下,前面的上下文switch은 항상 존재해야 합니다. 사실 일치는 대체 버전입니다
  • 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;);
    }
     
    ?>
    🎜기본값🎜다양한 용도로 사용됩니다:🎜🎜
    • 🎜🎜 다른 모든 상황을 함께 처리하십시오. 🎜🎜이는 제한된 사례 목록을 사용할 수 있으며 해당 목록 이외의 모든 항목을 단일 방식으로 처리할 수 있는 경우입니다. 🎜🎜🎜
    • 🎜🎜 도달하면 오류가 발생합니다. 🎜🎜이 경우 이전 컨텍스트 🎜🎜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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.