Php 如何在设置 vardic 参数时跳过默认参数?

问题描述 投票:0回答:1

好吧,我有一个现有的方法:

public function dbQuery(string $query, bool $flag1 = false, int $flag2 = SOME_DEFAULT, bool $flag3 = false)

现在我想对其进行调整,以便可以将绑定值作为 vardic 参数传递,但不会破坏当前接口(我知道 arg 标志是一种反模式),即:

public function dbQuery(string $query, bool $flag1 = false, int $flag2 = SOME_DEFAULT, bool $flag3 = false, mixed ...$params)

如何在传入参数的同时保留默认标志的同时调用 dbQuery?

我已经尝试过:

  • ->dbQuery('my query', params: [1, 2, 3]);
    但它作为第一个 vardic arg 中的数组出现,例如
    $params = [[1, 2, 3]]
  • ->dbQuery('my query', params: ...[1, 2, 3]);
    是无效语法
  • ->dbQuery('my query', ...['params' => [1, 2, 3]]);
    与选项 1 相同的结果

没有任何与此用法完全一致的内容显示在: https://wiki.php.net/rfc/variadicshttps://wiki.php.net/rfc/named_params

虽然在后面的 RFC 中明确表明 vardics 之前的默认命名参数是有效签名,但没有说明如何访问 vardics。

php arguments default variadic-functions keyword-argument
1个回答
0
投票

当使用 vardic 参数调用函数时,同时使用前面参数的默认值,您需要使用命名参数显式跳过这些参数:

->dbQuery(
    query: 'my query', 
    params: ...[1, 2, 3]
);

或者如果您想更明确地使用默认值:

->dbQuery(
    query: 'my query',
    flag1: false,
    flag2: SOME_DEFAULT,
    flag3: false,
    ...[1, 2, 3]
);
© www.soinside.com 2019 - 2024. All rights reserved.