Laravel 9 突变体冒号
Laravel 9 mutators colon
在 Laravel 9 中,修改器有不同的实现。以下例子来自the official documentation.
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
Named arguments 是 PHP 8.0 中的新功能。
在具有简单签名的函数或方法中,它可以作为一种 self-documentation 来指示参数是什么。例如,在您提供的代码中,两个参数都是对提供的值执行基本字符串操作的简单回调。如果没有参数名称,阅读代码的人将需要检查方法签名以了解每个参数的作用。
在使用具有长签名或复杂默认值的函数或方法时,这也是一种仅指定所需参数的便捷方式。
例如,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
);
在 Laravel 9 中,修改器有不同的实现。以下例子来自the official documentation.
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
Named arguments 是 PHP 8.0 中的新功能。
在具有简单签名的函数或方法中,它可以作为一种 self-documentation 来指示参数是什么。例如,在您提供的代码中,两个参数都是对提供的值执行基本字符串操作的简单回调。如果没有参数名称,阅读代码的人将需要检查方法签名以了解每个参数的作用。
在使用具有长签名或复杂默认值的函数或方法时,这也是一种仅指定所需参数的便捷方式。
例如,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
);