在 Laravel 9 中,变异器有不同的实现。以下示例来自官方文档。
protected function firstName(): Attribute
{
return Attribute::make(
get: fn ($value) => ucfirst($value),
set: fn ($value) => strtolower($value),
);
}
但是 get
和
set
之后的 冒号:是什么?这是 PHP 8 中的新功能吗? Attribute::make 的定义是:
public static function make(callable $get = null, callable $set = null): Attribute
命名参数是 PHP 8.0 中的新功能。
在具有简单签名的函数或方法中,它可以作为一种自我文档来指示参数是什么。例如,在您提供的代码中,两个参数都是简单的回调,对提供的值执行基本的字符串操作。如果没有参数名称,阅读代码的人将需要检查方法签名以了解每个参数的作用。
这也是一种在使用具有长签名或复杂默认值的函数或方法时仅指定所需参数的便捷方法。
例如,
htmlspecialchars()
的签名如下所示:
htmlspecialchars(
string $string,
int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
?string $encoding = null,
bool $double_encode = true
): string
在以前的版本中,如果您想将
double_encode
参数更改为 false,但将其他参数保留为默认值,则必须执行以下操作:
<?php
htmlspecialchars(
"Some text & stuff",
ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
null,
false
);
但是对于命名参数,它看起来像这样:
<?php
htmlspecialchars(
"Some text & stuff",
double_encode: false
);
基于该代码,为什么我的代码说有错误未定义的方法'make'