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),
    );
}

但是冒号:getset之后是什么?这是 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
);