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更安全更简洁。合理的分支策略可以减少代码复杂度,提高可读性。
