本文目录导读:

我来详细解释PHP中的三目运算符和简洁写法:
三目运算符 (Ternary Operator)
基本语法
$result = (条件) ? 值1 : 值2; // 如果条件为true,返回值1;否则返回值2
示例
// 基础用法 $age = 20; $status = ($age >= 18) ? '成年' : '未成年'; echo $status; // 输出:成年 // 嵌套三目(不推荐过度使用) $score = 85; $grade = ($score >= 90) ? 'A' : (($score >= 80) ? 'B' : 'C'); echo $grade; // 输出:B
简化三目运算符 (PHP 7+)
Null 合并运算符 (??)
// 检查变量是否存在且不为null $username = $_GET['username'] ?? '匿名用户'; // 等同于 $username = isset($_GET['username']) ? $_GET['username'] : '匿名用户';
空合并赋值运算符 (??=) (PHP 7.4+)
$name = null; $name ??= '默认值'; echo $name; // 输出:默认值
简洁写法技巧
直接使用 && 和 || 替代
// 传统写法
if ($loggedIn) {
echo '欢迎回来';
}
// 简洁写法
$loggedIn && print('欢迎回来');
// 默认值设置
$loggedIn || $loggedIn = false;
使用三元组缩写 (?:)
// 传统三目 $result = $value ? $value : 'default'; // 简洁写法 (PHP 5.3+) $result = $value ?: 'default'; // value为true,则使用$value,否则使用'default'
实际应用示例
数组操作
// 获取数组值
$data = ['name' => '张三'];
$name = $data['name'] ?? '未知姓名';
// 检查并设置默认值
$config = [
'timeout' => null,
'retry' => 3
];
$timeout = $config['timeout'] ?? 30;
$retry = $config['retry'] ?: 5;
函数返回值
function getUserName($id) {
$user = findUser($id);
return $user ? $user['name'] : '用户不存在';
}
// 更简洁的写法
function getUserName($id) {
return findUser($id)['name'] ?? '用户不存在';
}
注意事项
避免过度复杂
// 不推荐 - 难以阅读
$result = $a ? ($b ? $c : $d) : ($e ? $f : $g);
// 推荐 - 使用if语句
if ($a) {
$result = $b ? $c : $d;
} else {
$result = $e ? $f : $g;
}
类型转换问题
// 注意空字符串和0的处理 $value = 0; $result = $value ?: 'default'; // 结果为0,因为0被视为false $result = $value ?? 'default'; // 结果为0,因为$value存在 // "0"字符串的情况 $string = "0"; $result = $string ?: 'default'; // 结果为'default',因为"0"被视为false
最佳实践
// 简单条件使用三目
$status = $user->isActive() ? '在线' : '离线';
// null检查使用??
$name = $_POST['name'] ?? '未填写';
// 复杂逻辑使用if-else
if ($user->getAge() >= 18) {
$result = '成年用户';
} elseif ($user->getAge() >= 13) {
$result = '青少年';
} else {
$result = '儿童';
}
选择使用哪种写法取决于代码的可读性和具体场景,简洁不等于可读性更好。