PHP8.0新特性

目录

一、命令参数

二、Nullsafe 运算符

三、联合类型

四、match表达式

五、注解


一、命令参数

支持根据参数名传参,好处:可以跳过某些默认值参数,不必再传一遍。

function sum($a=1, $b=2, $c=5)
{
  return $a + $b +$c;
}
//假设c为6
//php8前
   sum(1,2,6);
//php8
   sum(c:6)
//顺序也可以打乱,如:
   sum(c:6, a:1, b:2)

二、Nullsafe 运算符

自 PHP 8.0.0 起,类属性和方法可以通过 "nullsafe" 操作符访问: ?->

对象引用解析(dereference)为 null 时不抛出异常,而是返回 null。 并且如果是链式调用中的一部分,剩余链条会直接跳过。

此操作的结果,类似于在每次访问前使用 is_null() 函数判断方法和属性是否存在,但更加简洁

// 自 PHP 8.0.0 起可用
$result = $repository?->getUser(5)?->name;

// 上边那行代码等价于以下代码
if (is_null($repository)) {
    $result = null;
} else {
    $user = $repository->getUser(5);
    if (is_null($user)) {
        $result = null;
    } else {
        $result = $user->name;
    }
}

三、联合类型

联合类型就是指我们在定义方法的参数以及返回值时,可以具有几种不同的类型

function sum(int|string $a=1, int $b=2, int $c=5) :int
{
    return $a + $b +$c;
}
参数a的数据类型可以是int也可以是string

四、match表达式

match表达式和switch语句是比较类似的,但有些场景下它会是更好的选择,比如说判断条件为表达式的情况下。我们需要根据其特点来选择。

match表达式的特点:

1、它的匹配条件可以是表达式

2、它的比较是严格比较(即===),而switch是松散比较(即==);

3、match表达式会自动返回匹配到的结果,不需要手动return;

//值匹配
$food = 'cake';
$return_value = match ($food) {
    'apple' => 'This food is an apple',
    'bar' => 'This food is a bar',
    'cake' => 'This food is a cake',
    'default' => 'noting',
};
var_dump($return_value);

//表达式匹配
$age = 18;
$output = match (true) {
    $age < 13 => "Child",
    $age <= 19 => "Teenager",
    $age >= 40 => "Old adult"
};
var_dump($output);

五、注解

注解功能提供了代码中的声明部分都可以添加结构化、机器可读的元数据的能力, 注解的目标可以是类、方法、函数、参数、属性、类常量。 通过反射API可在运行时获取注解所定义的元数据。 因此注解可以成为直接嵌入代码的配置式语言。

通过注解的使用,在应用中实现功能、使用功能可以相互解耦。

注解需要反射的配合,后续我会写在新的文章中。

完结

如果你在阅读这篇文章时有所收获,请不要忘记点赞评论加关注,你的支持是我创作的最大动力。当然,如果你在文中发现了疏漏之处,或是有着其他的见解,欢迎私信与我交流。


我是老卢,一个热爱分享、不断探索的知识旅者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员老卢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值