Rumah > pembangunan bahagian belakang > tutorial php > Perintah suis praktikal dalam PHP

Perintah suis praktikal dalam PHP

DDD
Lepaskan: 2023-10-09 10:28:01
asal
1214 orang telah melayarinya

Pastikan perintah Suis tersusun dengan baik dalam PHP

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

缺少默认条目

首先要考虑的是该switch声明是否包含default案例。Adefault充当后备选项,确保在没有定义的case Walau bagaimanapun, mencapai penukaran yang bersih dan cekap datang dengan halangannya sendiri.

Artikel ini meneroka petua dan amalan asas untuk menyemak kualiti arahan "suis" untuk memastikan kualiti kod dan mengoptimumkan prestasinya. 🎜🎜🎜

lalai🎜🎜kes. 🎜🎜A🎜🎜<code style="box-sizing: border-box; padding: 0.2rem 0.5rem; margin: 0px 0.2rem; font-size: 0.9em; background: rgb(241, 241, 241); border : 1px solid rgb(225, 225, 225); kotak; pelapik: 0.2rem 0.5rem; 4px;">case🎜Laksanakan kod apabila item dipadankan. 🎜🎜

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

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

default服务于不同的目的:

  • 将所有其他情况一并处理。这是当有限的案例列表可用时,并且该列表之外的任何事情都可以以单一方式处理。
  • 如果达到则引发错误。在这种情况下,前面的上下文switch hendaklah sentiasa ada. Malah, arahan lalai
tiada, ia akan membuang pengecualian.

<?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;);
}
 
?>
Salin selepas log masuk
<li style="box-sizing: border-box; margin-left: 1.3em;"> </p>🎜 Rawat semua situasi lain bersama-sama. 🎜🎜Ini adalah apabila senarai kes terhad tersedia, dan apa-apa sahaja di luar senarai itu boleh dikendalikan dalam satu cara. 🎜🎜🎜<li style="box-sizing: border-box; margin-bottom: 0.6em; margin-left: 1.3em;">🎜🎜 Menimbulkan ralat jika dicapai. 🎜🎜Dalam kes ini, konteks sebelumnya 🎜🎜<code style="box-sizing: border-box; padding: 0.2rem 0.5rem; margin: 0px 0.2rem; font-size: 0.9em; background: rgb( 241, 241, 241); sempadan: 1px pepejal rgb(225, 225, 225); 🎜🎜Kemudian, apabila situasi selain daripada situasi undang-undang mencapai perintah, pengecualian harus dilemparkan. 🎜🎜🎜🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;?php switch($a) { case &amp;#39;gif&amp;#39;: // doSomething() and break case &amp;#39;jpeg&amp;#39;: case &amp;#39;jpg&amp;#39;: // doSomething() and break case &amp;#39;png&amp;#39;: // doSomething() and break case &amp;#39;gif&amp;#39;: // doSomething() and break default: throw new MyException(&amp;#39;This should be an image format&amp;#39;); } ?&gt;</pre><div class="contentsignin">Salin selepas log masuk</div></div><div class="contentsignin">Salin selepas log masuk</div></div>🎜🎜Sentiasa pastikan suis mempunyai nilai lalai. 🎜🎜<h2 id="toc_2" style="box-sizing: border-box; color: rgb(85, 85, 85); width: 772.5px; margin-top: 0px; margin-bottom: 0.5em; text-rendering: optimizespeed; font-size: 1.6em; line-height: 1.3; font-family: Lato, sans-serif; text-wrap: wrap; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; vertical-align: inherit;">重复案例</span></h2><p style="box-sizing: border-box; margin-bottom: 1.3em; margin-top: 0px; color: rgb(119, 119, 119); font-family: Lato, sans-serif; font-size: medium; text-wrap: wrap; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; vertical-align: inherit;">检查</span><code style="box-sizing: border-box; padding: 0.2rem 0.5rem; margin: 0px 0.2rem; font-size: 0.9em; background: rgb(241, 241, 241); border: 1px solid rgb(225, 225, 225); border-radius: 4px;">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;);
}
 
?>
Salin selepas log masuk
Salin selepas log masuk

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

当实际值被常量名称或 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;);
}
 
?>
Salin selepas log masuk

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

重复的代码块

另一个常见问题是不同 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;);
}
 
?>
Salin selepas log masuk

枚举案例的使用

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;);
}
 
?>
Salin selepas log masuk

通过简单开关进行优化

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;);
}
 
?>
Salin selepas log masuk

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

如果开关混合了表达式和简单值,建议将简单文字放在第一个开关中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;);
    }
}
 
?>
Salin selepas log masuk

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

Ringkasan

Ringkasnya, switchPHP 中结构良好的语句可以极大地提高代码的清晰度、可维护性和性能。通过检查缺失的默认条目、消除重复的情况和代码块、利用类似枚举的结构以及优化复杂的开关,您可以确保您的语句仍然是switchDengan menyemak entri lalai yang tiada, menghapuskan kes pendua dan blok kod, memanfaatkan struktur seperti enum dan mengoptimumkan suis kompleks, anda boleh memastikan kenyataan anda masih

Atas ialah kandungan terperinci Perintah suis praktikal dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan