ZetCode

PHP 命名参数

最后修改:2025 年 2 月 15 日

在本文中,我们将展示如何在 PHP 中使用 命名参数。 命名参数允许您通过指定参数名称将参数传递给函数,而不是依赖参数的顺序。 此功能在 PHP 8.0 中引入,在调用函数时提供了更大的灵活性和可读性。

PHP 命名参数的主要特点

命名参数在处理具有许多可选参数或参数顺序不直观的函数时特别有用。

命名参数的基本用法

以下示例演示了如何在 PHP 中使用命名参数。

main.php
<?php

declare(strict_types=1);

function createUser(string $name, int $age, string $email): void
{
    echo "User created: $name, $age, $email\n";
}

createUser(name: "John Doe", age: 30, email: "john@example.com");

在此程序中,使用命名参数调用 createUser 函数。通过指定参数名称来传递参数,这使得函数调用更具可读性。

$ php main.php
User created: John Doe, 30, john@example.com

跳过可选参数

以下示例演示了如何使用命名参数跳过可选参数。

main.php
<?php

declare(strict_types=1);

function sendEmail(string $to, string $subject = "No Subject", string $body = ""): void
{
    echo "Sending email to: $to\n";
    echo "Subject: $subject\n";
    echo "Body: $body\n";
}

sendEmail(to: "john@example.com", body: "Hello, John!");

在此程序中,使用命名参数调用 sendEmail 函数。 跳过了 subject 参数,并使用了默认值。

$ php main.php
Sending email to: john@example.com
Subject: No Subject
Body: Hello, John!

顺序无关性

以下示例演示了命名参数如何允许您以任何顺序传递参数。

main.php
<?php

declare(strict_types=1);

function createProfile(string $name, int $age, string $country): void
{
    echo "Profile created: $name, $age, $country\n";
}

createProfile(country: "USA", name: "Jane Doe", age: 25);

在此程序中,使用命名参数以与参数列表不同的顺序调用 createProfile 函数。该函数仍然可以正常工作,因为参数是通过它们的名称来标识的。

$ php main.php
Profile created: Jane Doe, 25, USA

组合命名参数和位置参数

以下示例演示了如何在函数调用中组合命名参数和位置参数。

main.php
<?php

declare(strict_types=1);

function createOrder(string $product, int $quantity, float $price): void
{
    echo "Order created: $product, $quantity, $price\n";
}

createOrder("Laptop", price: 999.99, quantity: 1);

在此程序中,使用位置参数和命名参数的组合来调用 createOrder 函数。 第一个参数按位置传递,而其余参数按名称传递。

$ php main.php
Order created: Laptop, 1, 999.99

将命名参数与数组一起使用

以下示例演示了如何将命名参数与数组参数一起使用。

main.php
<?php

declare(strict_types=1);

function createPost(string $title, array $tags, string $content): void
{
    echo "Post created: $title\n";
    echo "Tags: " . implode(", ", $tags) . "\n";
    echo "Content: $content\n";
}

createPost(title: "PHP Named Arguments", tags: ["PHP", "Tutorial"], 
    content: "Learn about named arguments in PHP.");

在此程序中,使用命名参数调用 createPost 函数,其中包括用于标签的数组参数。

$ php main.php
Post created: PHP Named Arguments
Tags: PHP, Tutorial
Content: Learn about named arguments in PHP.

带有默认值的命名参数

以下示例演示了如何将命名参数与默认值一起使用。

main.php
<?php

declare(strict_types=1);

function createEvent(string $name, string $date = "2025-01-01", string $location = "Online"): void
{
    echo "Event created: $name, $date, $location\n";
}

createEvent(name: "PHP Conference", location: "New York");

在此程序中,使用命名参数调用 createEvent 函数,并使用 date 参数的默认值。

$ php main.php
Event created: PHP Conference, 2025-01-01, New York

带有可变函数的命名参数

以下示例演示了如何将命名参数与可变函数一起使用。

main.php
<?php

declare(strict_types=1);

function createReport(string $title, string ...$sections): void
{
    echo "Report created: $title\n";
    echo "Sections: " . implode(", ", $sections) . "\n";
}

createReport(title: "Annual Report", "Introduction", "Analysis", "Conclusion");

在此程序中,使用命名参数和用于部分的可变参数调用 createReport 函数。

$ php main.php
Report created: Annual Report
Sections: Introduction, Analysis, Conclusion

带有对象参数的命名参数

以下示例演示了如何将命名参数与对象参数一起使用。

main.php
<?php

declare(strict_types=1);

class User
{
    public function __construct(public string $name, public int $age) {}
}

function createUserProfile(User $user, string $bio): void
{
    echo "User Profile: {$user->name}, {$user->age}\n";
    echo "Bio: $bio\n";
}

createUserProfile(user: new User(name: "John Doe", age: 30), bio: "Software Developer");

在此程序中,使用命名参数调用 createUserProfile 函数,其中包括用于用户的对象参数。

$ php main.php
User Profile: John Doe, 30
Bio: Software Developer

带有回调的命名参数

以下示例演示了如何将命名参数与回调函数一起使用。

main.php
<?php

declare(strict_types=1);

function processData(array $data, callable $callback): void
{
    $result = array_map($callback, $data);
    echo "Processed Data: " . implode(", ", $result) . "\n";
}

processData(data: [1, 2, 3], callback: fn($n) => $n * 2);

在此程序中,使用命名参数调用 processData 函数,其中包括一个回调函数。

$ php main.php
Processed Data: 2, 4, 6

来源

PHP 命名参数 - 文档

在本文中,我们已经展示了如何在 PHP 中使用 命名参数。 命名参数提供了一种灵活且易于阅读的方式来将参数传递给函数,尤其是在处理具有许多可选参数的函数时。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出 所有 PHP 教程