三十的博客

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);
注意:PHP7.4+才能支持

…解构赋值

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] ?? '未知';
注意:PHP8.0+才能支持

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();
注意:PHP8.0+才能支持

数组解构搭配 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/>';
}
注意:PHP7.1+才能支持

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
需要保留左侧数据,仅补充新键 → + 运算符
#Php