好吧,我有一个现有的方法:
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/variadics 或https://wiki.php.net/rfc/named_params
虽然在后面的 RFC 中明确表明 vardics 之前的默认命名参数是有效签名,但没有说明如何访问 vardics。
当使用 vardic 参数调用函数时,同时使用前面参数的默认值,您需要使用命名参数显式跳过这些参数:
->dbQuery(
query: 'my query',
params: ...[1, 2, 3]
);
或者如果您想更明确地使用默认值:
->dbQuery(
query: 'my query',
flag1: false,
flag2: SOME_DEFAULT,
flag3: false,
...[1, 2, 3]
);