几个常用的PHP语法糖,学好了代码写法,“能让你少加三年班”。一、箭头函数:让闭包瘦身90%的魔法
array_map(function($user) use ($prefix) {
return $prefix . $user['name'];
}, $users);
array_map(fn($user) => $prefix . $user['name'], $users);
二、?? 空合并运算符:专治undefined的头痛病
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$page = $_GET['page'] ?? 1;
$config = $cache->get('config') ?? $db->query() ?? require 'default.php';
三、... 解构赋值:数组拆包神器
以前取数组值像玩扭蛋:
$first = $users[0];
$second = $users[1];
[$zhx, $sihong, ...$liuliu] = $users;
['name' => $name, 'email' => $email] = $user;
四、match表达式:switch-case的整容版
传统switch看上去很罗嗦:
switch ($sCode) {
case 200:
$message = '成功';
break;
case 404:
$message = '没找到';
break;
default:
$message = '系统错误';
}
$message = match($statusCode) {
200 => '成功',
404 => '没找到',
default => '未知错误'
};
五、str_contains:字符串包含检测的最短写法
之前我们的写法:
if (strpos($haystack, $needle) !== false) {
}
现在直接
if (str_contains($haystack, $needle)) {
}
全家桶还有:
str_starts_with()
str_ends_with()
六、Nullsafe运算符:链式调用的防崩盾牌
以前要层层判断:
if ($order && $order->getUser() && $order->getUser()->getAddress()) {
$city = $order->getUser()->getAddress()->city;
}
$city = $order?->getUser()?->getAddress()?->city;
(PHP8.0+专属,中途遇到null直接返回null)
七、数组解构+list:快速提取键值对
遍历时快速拆包:
foreach ($users as ['age' => $age, 'name' => $name]) {
echo "$age: $name";
}
$userDetal = ['王立', 'wang@example.com', 22];
list($name, $email, $age) = $userData;
八、太空船运算符:比较结果三态输出
usort($users, function($a, $b) {
if ($a['age'] == $b['age']) return 0;
return $a['age'] < $b['age'] ? -1 : 1;
});
usort($users, fn($a, $b) => $a['age'] <=> $b['age']);
使用时要注意:
团队项目要考虑最低PHP版本
过度简洁可以让某些小菜鸟看不懂
新特性要写单元测试防翻车
会用语法糖的程序员可不一定是高手,但高手一定懂得在合适的地方加糖。毕竟,我们用PHP的目的就是为了少写代码提高开发效率。
阅读原文:原文链接
该文章在 2025/5/26 10:57:36 编辑过