可选类型化可变参数

kek*_*coh 3 php

PHP 从 5.6 版本开始就具有可变参数解包功能

function doSomething(User ...$users) {
     return count($users);
}
$userOrNoUserList = [$user1, null, $user2];
doSomething(...$userOrNoUserList); // wanted: 3
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

可捕获的致命错误:传递给 doSomething() 的参数 2 必须是 user 的实例,给定为 null

但我想保留里面的列表结构doSomething();我不想null在调用之前过滤值。是否也可以允许null值?

小智 5

您必须使用类型之前的字符定义可为空类型(在 PHP 7.1.0 中可用):?User

function doSomething(?User ...$users) {
     return count($users);
}
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话:

$userOrNoUserList = [$user1, null, $user3];
doSomething(...$userOrNoUserList); // 3
Run Code Online (Sandbox Code Playgroud)

  • 仅限 PHP >= 7.1.0。 (3认同)