这个例子中的冒号是做什么的? PHP

what does the colon do in this example? PHP

我在 Laravel 文档中看到了这个创建访问器的例子,但我不明白 'get' 单词后面那个冒号的意思:

Link到页面:https://laravel.com/docs/9.x/eloquent-mutators#defining-an-accessor

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;
 
class User extends Model
{
    /**
     * Get the user's first name.
     *
     * @return \Illuminate\Database\Eloquent\Casts\Attribute
     */
    protected function firstName(): Attribute
    {
        return Attribute::make(
            get: fn ($value) => ucfirst($value),
        );
    }
}

命名参数(或命名参数)在 PHP8 中引入。当方法有很多参数时,它们会有所帮助and/or我们不记得参数的顺序。

假设我们有以下 setcookie 函数

setcookie ( 
    string $name, 
    string $value = "", 
    int $expires = 0, 
    string $path = "", 
    string $domain = "", 
    bool $secure = false, 
    bool $httponly = false,
) : bool

我们需要使用这个函数来设置一个名称和时间来过期。如果我们不记得参数的顺序,就会成为一个问题,并可能产生不希望的结果。即使我们记住或查找参数的顺序,如果没有命名参数,我们也会将其用作:

//Without named arguments
setcookie('Test', '', 100);

使用命名参数我们可以这样做

setcookie(name:'Test', expires:100);

基本上使用命名参数的语法是

functionName(argumentName: value, anotherArgumentName: value);

希望这可以帮助您理解为什么在 get

之后使用 :

进一步阅读:

https://stitcher.io/blog/php-8-named-arguments

https://www.php.net/manual/en/functions.arguments.php#:~:text=Named%20arguments%20allow%20passing%20arguments,allows%20skipping%20default%20values%20arbitrarily.

按照你的例子,我试着勾勒出工作流程。

<?php
class A {
    public static function make(Closure $fn, string $name = "Dirk" , string $sex = "d"): string {
        $gender = $fn(
            [
                "m" => "male", 
                "f" => "female"
            ][$sex]
        );
        return "Hello " . $fn($name) . ". You are a " . $gender .".";
        
    }
}

echo A::make(
    sex: "m", 
    name: "mark", 
    fn: fn ($value) => ucfirst($value)
);

// output: Hello Mark. You are a Male