混合字符串与整数键的关联数组解包时为何报指定错误?
为什么PHP混合字符串与整数键数组解包时会抛出特定错误信息?
代码示例
function func(...$array) {} func(...[ 'a' => 'A', 2 => 'B', 'c' => 'C' ]);
抛出的错误
原错误信息:Cannot use positional argument after named argument during unpacking
中文翻译:解包时不能在命名参数后使用位置参数
错误信息的由来
PHP处理数组解包时,会把带字符串键的元素当作命名参数,数字键的元素当作位置参数。当两种键混合时,解包顺序遵循数组的内部顺序——这个例子里先处理字符串键'a'(命名参数),接着是数字键2(位置参数),这直接违反了PHP“位置参数不能出现在命名参数之后”的参数传递规则。
PHP的错误检测逻辑没有专门针对“混合键类型”设计提示,而是从参数解析的规则冲突角度抛出了这个错误。本质是混合键导致解包时参数类型顺序违规,所以错误信息指向了参数顺序问题,而非直接说明“不能混合字符串与整数键”。
内容的提问来源于stack exchange,提问作者lukas.j
相关产品推荐
相关产品推荐

