PHP에서는 switch
switch
语句是控制程序流程的强大工具,尤其是在处理多个条件分支时。然而,实现干净高效的转换也有其自身的障碍。这篇文章探讨了检查“switch”命令质量的基本技巧和实践,以确保代码质量并优化其性能。
首先要考虑的是该switch
声明是否包含default
案例。Adefault
充当后备选项,确保在没有定义的case
문은 프로그램 흐름을 제어하는 강력한 도구입니다. 특히 여러 조건부 분기를 처리할 때 그렇습니다.
switch
🎜포함 여부 선언🎜기본
🎜🎜케이스. 🎜🎜A🎜🎜default
🎜 정의된 🎜case
🎜항목이 일치하면 코드를 실행합니다. 🎜🎜기본값
default
应始终存在。事实上,命令match
是 的替代版本switch
,当它无法匹配任何case
, 并且default
缺少 时,它会引发异常。
<?php switch($a) { case 0: echo 'A'; break; case 1: echo 'A'; break; } ?>
default
服务于不同的目的:
switch
은 항상 존재해야 합니다. 사실 일치
는 대체 버전입니다 및 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
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');
}
?>
🎜🎜항상 스위치에 기본값이 있는지 확인하세요. 🎜🎜重复案例
检查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');
}
}
?>
以不同的方式处理它们也可能更方便,例如使用先前的条件。
요약
간단히 말하면, switch
switch
PHP 中结构良好的语句可以极大地提高代码的清晰度、可维护性和性能。通过检查缺失的默认条目、消除重复的情况和代码块、利用类似枚举的结构以及优化复杂的开关,您可以确保您的语句仍然是switch
PHP의 잘 구조화된 명령문은 코드의 명확성과 유지 관리성을 크게 향상시킬 수 있습니다. 성능.
누락된 기본 항목을 확인하고, 중복 사례 및 코드 블록을 제거하고, 열거형 구조를 활용하고, 복잡한 스위치를 최적화함으로써 명령문이 여전히 🎜🎜switch
🎜모든 PHP 코드 베이스의 효율적이고 효과적인 부분입니다. 🎜🎜
위 내용은 PHP의 실용적인 전환 명령의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!