You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中使用命名参数跳过默认值后传递可变参数的方法咨询

PHP命名参数配合可变长度参数的调用问题

函数与枚举定义

现有如下PHP函数:

function foo(string $domain, string $streamId, string $app = 'live', TypeEnum ...$type) {}

对应的枚举类定义:

enum TypeEnum: string {
    case Flv = 'flv';
    case M3u8 = 'm3u8';
    case Rtmp = 'rtmp';
}

常规调用方式

已知可以通过以下方式向可变长度参数...$type传递两个枚举值:

foo('domain', 'stream id', 'live', TypeEnum::Flv, TypeEnum::M3u8);

需求与错误尝试

由于$app参数有默认值,希望使用命名参数跳过该参数,但尝试的几种写法均报错:

// 错误:命名参数后未指定参数名称
foo('domain', 'stream id',  type: TypeEnum::Flv, TypeEnum::M3u8);
// 错误:直接传数组不符合TypeEnum类型要求
foo('domain', 'stream id',  type: [TypeEnum::Flv, TypeEnum::M3u8]);
// 错误:重复使用同一个命名参数
foo('domain', 'stream id',  type: TypeEnum::Flv, type: TypeEnum::M3u8);

正确调用方式

要跳过$app并给...$type传递多个值,需要结合展开运算符(...),将包含枚举值的数组展开后通过命名参数传递:

foo('domain', 'stream id', type: ...[TypeEnum::Flv, TypeEnum::M3u8]);

原理:可变长度参数...$type本质是接收多个独立的TypeEnum类型参数,通过...展开数组,能将数组中的每个元素作为独立参数绑定到$type,既符合参数类型要求,又能直接跳过有默认值的$app参数。

内容的提问来源于stack exchange,提问作者Joey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:50:57