目录
一、命令参数
支持根据参数名传参,好处:可以跳过某些默认值参数,不必再传一遍。
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可在运行时获取注解所定义的元数据。 因此注解可以成为直接嵌入代码的配置式语言。
通过注解的使用,在应用中实现功能、使用功能可以相互解耦。
注解需要反射的配合,后续我会写在新的文章中。
完结
如果你在阅读这篇文章时有所收获,请不要忘记点赞评论加关注,你的支持是我创作的最大动力。当然,如果你在文中发现了疏漏之处,或是有着其他的见解,欢迎私信与我交流。
我是老卢,一个热爱分享、不断探索的知识旅者。