当前位置: 首页 > news >正文

PHP条件语句与分支逻辑优化

PHP条件语句与分支逻辑优化

条件语句是编程的基础。PHP提供了if-else、switch、match等多种分支结构。今天说说各种分支语句的使用和优化。

if-else是最基本的分支结构。

```php
$score = 85;

if ($score >= 90) {
$grade = 'A';
} elseif ($score >= 80) {
$grade = 'B';
} elseif ($score >= 70) {
$grade = 'C';
} elseif ($score >= 60) {
$grade = 'D';
} else {
$grade = 'F';
}

echo "成绩: $grade\n";
?>

switch语句适合多个确定值的比较。

```php
$code = 404;

switch ($code) {
case 200:
$message = 'OK';
break;
case 301:
case 302:
$message = 'Redirect';
break;
case 404:
$message = 'Not Found';
break;
case 500:
$message = 'Server Error';
break;
default:
$message = 'Unknown';
}

echo "状态码: $code, 消息: $message\n";
?>

PHP8的match表达式更简洁,返回值可以直接赋值。

```php
$code = 404;

$message = match ($code) {
200 => 'OK',
201 => 'Created',
301, 302 => 'Redirect',
404 => 'Not Found',
500 => 'Server Error',
default => 'Unknown',
};

echo "消息: $message\n";

// match可以做更复杂的匹配
$value = 3.14;
$type = match (true) {
is_int($value) => '整数',
is_float($value) => '浮点数',
is_string($value) => '字符串',
is_bool($value) => '布尔',
default => '其他',
};

echo "类型: $type\n";
?>

三元运算符简化简单的条件赋值。

```php
$name = $_GET['name'] ?? '默认名';
echo "名称: $name\n";

$age = $age ?? 18;

$status = $age >= 18 ? '成年' : '未成年';
echo $status . "\n";

// 三元嵌套
$result = $a ? 'A' : ($b ? 'B' : 'C');
?>

分支逻辑优化的几个原则。尽早返回减少嵌套,用查找表代替长switch,用多态代替条件判断。

```php
// 查找表代替switch
$messages = [
200 => 'OK',
201 => 'Created',
404 => 'Not Found',
500 => 'Server Error',
];
$code = 404;
echo $messages[$code] ?? 'Unknown' . "\n";

// 多态代替条件判断
interface Greeting { public function greet(): string; }

class ChineseGreeting implements Greeting
{
public function greet(): string { return '你好'; }
}

class EnglishGreeting implements Greeting
{
public function greet(): string { return 'Hello'; }
}

function getGreeting(string $lang): Greeting
{
return match ($lang) {
'zh' => new ChineseGreeting(),
'en' => new EnglishGreeting(),
default => new EnglishGreeting(),
};
}

echo getGreeting('zh')->greet() . "\n";
?>

好的分支逻辑让代码更容易理解和维护。match表达式是PHP8的重要改进,比switch更安全更简洁。合理的分支策略可以减少代码复杂度,提高可读性。

http://www.cnnetsun.cn/news/2838818.html

相关文章:

  • BentoML vs FastAPI:模型交付流水线的工程化选择
  • 用Matlab搞定数学建模:从濒危物种到汽车租赁,手把手教你玩转差分方程
  • DIY T12烙铁头驱动:用三极管和电容搞定NMOS上管驱动(附Multisim仿真)
  • 手把手复现Jira CVE-2019-8451 SSRF漏洞:从环境搭建到BurpSuite实战验证
  • PatchTST时间序列分块建模原理与工业实践
  • 用Cheat Engine 7.5给植物大战僵尸“动手术”:从阳光到僵尸血量的完整逆向实战
  • AD22白嫖指南:手把手教你安装Ansys EDB Exporter插件,搞定PCB导入HFSS
  • 四行代码实现低资源语言回译增强:nlpaug实战指南
  • 用SVM识别恶意网址的实战工具包:支持URL文本分类和PCAP流量特征提取
  • Mythos解析:大模型长程推理中的意图锚定技术
  • 智能超表面通信中的两阶段编码滑动波束训练技术
  • MATLAB环境下用粒子群算法自动整定LLC谐振变换器PI参数的仿真资源包
  • LLM工程化落地:MLOps与DevOps融合实践指南
  • 从URDF到Python仿真:用Robotics Toolbox快速验证你的ROS机器人模型
  • MSC8103硬件设计实战:电源、时钟、复位与信号完整性避坑指南
  • 从MPC857T到MPC885嵌入式平台升级:硬件迁移与驱动适配实战指南
  • PyTorch实战:用混合密度网络(MDN)为你的预测模型加上‘不确定性’刻度尺
  • Oracle开发实战速查包:110个高频函数详解+事务/触发器/循环PL/SQL实操脚本与图解
  • THULAC核心算法原理:清华大学NLP实验室的分词技术揭秘
  • 机器学习工程师的实战统计工具箱:从分布漂移检测到AB实验诊断
  • 告别串口调试!用Qt+VISA库搞定普源DM3068万用表LAN口自动化(附完整代码)
  • personalDNSfilter与Pi-hole对比分析:哪个更适合你的隐私需求?终极指南
  • RenderMan for Blender与Cycles/Eevee终极对比:哪个渲染器更适合你的3D项目?
  • 扒一扒TC264官方库的锁实现:CMPSWAP.W指令到底牛在哪?
  • 从Proteus仿真到实物制作:我的DS18B20温控器“踩坑”与升级实录
  • 3分钟告别视频制作焦虑:用AI全自动短视频引擎Pixelle-Video开启创作新时代
  • Objx实战案例:轻松处理复杂嵌套数据结构
  • PyTorch手动实现ANN全流程:构建、优化与贝叶斯调参
  • Scala Pickling 完全指南:从零开始掌握高效 Scala 序列化框架
  • LiveQing视频点播流媒体RTMP推流服务用户手册-分屏展示:单分屏、四分屏、九分屏、十六分屏、轮巡播放、分组管理、记录加载