PHP 语法糖
箭头函数
php
$prefix = '海贼王';
$users = [
['name' => '路飞', 'email' => 'lf@hzw.com'],
['name' => '娜美', 'email' => 'nm@hhzw.com'],
['name' => '汉库克', 'email' => 'hkk@hzw.com'],
];
$newUsers1 = array_map(function ($user) use ($prefix) {
return $prefix . '-' . $user['name'];
}, $users);
$newUsers2 = array_map(fn($user) => $prefix . '-' . $user['name'], $users);
…解构赋值
php
$users = [
['name' => '路飞', 'email' => 'lf@hzw.com'],
['name' => '娜美', 'email' => 'nm@hhzw.com'],
['name' => '汉库克', 'email' => 'hkk@hzw.com'],
];
## list($first, $second) = $users;
[$first, $second] = $users;
$info = ['name' => '路飞', 'email' => 'lf@hzw.com', 'sex' => 'male', 'age' => 123];
['name' => $name, 'email' => $email] = $info;
php
$a = 11;
$b = 22;
[$a, $b] = [$b, $a];
echo $a, '--',$b;
match 表达式
php
switch ($code) {
case 200:
$msg2 = '成功';
break;
case 404:
$msg2 = '没找到';
break;
case 401:
$msg2 = '没权限';
break;
default:
$msg2 = '未知';
}
## 比较时也会比较数据类型
$msg3 = match ($code) {
200 => '成功',
404 => '没找到',
401 => '没权限',
default => '未知',
};
$statusCode = [200 => '成功', '404' => '没找到', 401 => '没权限'];
$msg1 = $statusCode[$code] ?? '未知';
nullsafe 运算符
php
class User
{
private string $name;
private string $gender;
public function __construct(string $name, string $gender)
{
$this->name = $name;
$this->gender = $gender;
}
public function getInfo(): string
{
return $this->name . ' ' . $this->gender;
}
}
class Work
{
private User $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function getUser(): User
{
return $this->user;
}
}
$user = new User('zs', 'male');
$work = (new Work($user));
$userInfo = $work?->getUser()?->getInfo();
数组解构搭配 list
php
$users = [
['name' => '路飞', 'email' => 'lf@hzw.com'],
['name' => '娜美', 'email' => 'nm@hhzw.com'],
['name' => '汉库克', 'email' => 'hkk@hzw.com'],
];
foreach ($users as ['name' => $name, 'email' => $email]) {
echo $name, '-', $email, '<br/>';
}
usort 搭配太空船操作符
php
$users = [
['name' => '路飞', 'email' => 'lf@hzw.com', 'age' => 111],
['name' => '娜美', 'email' => 'nm@hhzw.com', 'age' => 44],
['name' => '汉库克', 'email' => 'hkk@hzw.com', 'age' => 78],
];
## 根据年龄从小到大
// usort($users, function ($a, $b) {
// if ($a['age'] == $b['age']) return 0;
// return ($a['age'] > $b['age']) ? 1 : -1;
// });
usort($users, function ($a, $b) {
return $a['age'] <=> $b['age'];
});
合并数组
php
$arr1 = ['a' => 'apple', 3 => 'banana'];
$arr2 = ['a' => 'apricot', 5 => 'berry', 3 => 'cherry'];
$result = array_merge($arr1,$arr2);
// [0 => 'banana',1 => 'berry',2 => 'cherry','a'=>'apricot']
$result2 = $arr1 + $arr2;
// [3 => 'banana',5 => 'berry','a'=>'apple']
$result3 = array_merge($arr2);
// [0 => 'berry',1 => 'cherry','a'=>'apricot']
// 直接修改原数组
$arr1 += $arr2
$arr3 = ['apple','banana','berry'];
$arr4 = ['tom','jack','marry'];
$arr3 += $arr4;
// [0 => 'banana',1 => 'banana',2 => 'berry',3 => 'siri']
需要覆盖同名键且重新索引数字键 → array_merge
需要保留左侧数据,仅补充新键 → + 运算符