本文给大家带来PHP8 新特性解读和示例,希望对需要的朋友有所帮助! PHP8.0 新特性解读和示例 新增命名参数功能 啥是命名参数? 就是 具名 参数,在调用函数的时候,可以指定参数名称,指定参数名称后,参数顺序可以不安装原函数参数顺序传. 例子: <?php /**
* 计算余额方法
* @param $amount 账户金额
* @param $payment 支出金额
* @return $balance = $amount-$payment 余额
*/
function balance($amount, $payment)
{
return $amount - $payment;
}
//传统方式调用
balance(100, 20);
//php8 使用命名参数调用
balance(amount: 100, payment: 20);
//也可以换个顺序,这样来
balance(payment: 20, amount: 100);
注解功能 啥是注解?直接上代码,最后在解释 例子: #[Attribute]class PrintSomeThing{
public function __construct($str = '')
{
echo sprintf("打印字符串 %s
", $str);
}}#[PrintSomeThing("hello world")]class AnotherThing{}// 使用反射读取住解$reflectionClass = new ReflectionClass(AnotherThing::class);$attributes = $reflectionClass->getAttributes();foreach($attributes as $attribute) {
$attribute->newInstance(); //获取注解实例的时候,会输出 ‘打印字符串 Hello world’} 注解功能个人理解总结,使用注解可以将类定义成一个一个 低解耦,高内聚 的元数据类。在使用的时候通过注解灵活引入,反射注解类实例的时候达到调用的目的。 **注解类只有在被实例化的时候才会调用
构造器属性提升 啥意思呢,就是在构造函数中可以声明类属性的修饰词作用域 例子: <?php
// php8之前
class User
{
protected string $name;
protected int $age;
public function __construct(string $name, int $age)
{
$this->name = $name;
$this->age = $age;
}
}
//php8写法,
class User
{
public function __construct(
protected string $name,
protected int $age
) {}
} 节约了代码量,不用单独声明类属性了。
联合类型 在不确定参数类型的场景下,可以使用. 例子: function printSomeThing(string|int $value)
{
var_dump($value);
}
Match表达式 和switch cash差不多,不过是严格===匹配 例子: <?php$key = 'b';$str = match($key) {
'a' => 'this a',
'c' => 'this c',
0 => 'this 0',
'b' => 'last b',};echo $str;//输出 last b
新增 Nullsafe 运算符 <?php
class User
{
public function __construct(private string $name)
{
//啥也不干
}
public function getN
.........................................................
|