Error Identifier: argument.nonUnpackAfterUnpacked
Every error reported by PHPStan has an error identifier. Here’s a list of all error identifiers. In PHPStan Pro you can see the error identifier next to each error and filter errors by their identifiers.
Code example #
<?php declare(strict_types = 1);
function foo(int $a, int $b, int $c): void {}
$args = [1, 2];
foo(...$args, 3);
Why is it reported? #
PHP does not allow a non-unpacked argument to follow an unpacked (...) argument in a function or method call. Once you use the spread operator to unpack arguments, all subsequent arguments must also be unpacked. Mixing unpacked and regular arguments in this order creates ambiguity in how parameters are mapped.
This is a compile-level restriction in PHP and will result in a fatal error at runtime.
How to fix it #
Include all arguments in the unpacked array:
<?php declare(strict_types = 1);
function foo(int $a, int $b, int $c): void {}
-$args = [1, 2];
-foo(...$args, 3);
+$args = [1, 2, 3];
+foo(...$args);
Or pass all arguments individually without unpacking:
<?php declare(strict_types = 1);
function foo(int $a, int $b, int $c): void {}
-$args = [1, 2];
-foo(...$args, 3);
+foo(1, 2, 3);
Non-ignorable error #
This error cannot be ignored using @phpstan-ignore or the ignoreErrors configuration. Non-ignorable errors indicate code that would cause a crash or a fatal error at runtime, or a fundamental problem in the analysed code that must be addressed.
Rules that report this error #
- PHPStan\Rules\Classes\ClassAttributesRule [1]
- PHPStan\Rules\Classes\ClassConstantAttributesRule [1]
- PHPStan\Rules\Classes\InstantiationRule [1]
- PHPStan\Rules\Constants\ConstantAttributesRule [1]
- PHPStan\Rules\EnumCases\EnumCaseAttributesRule [1]
- PHPStan\Rules\Functions\ArrowFunctionAttributesRule [1]
- PHPStan\Rules\Functions\CallCallablesRule [1]
- PHPStan\Rules\Functions\CallToFunctionParametersRule [1]
- PHPStan\Rules\Functions\CallUserFuncRule [1]
- PHPStan\Rules\Functions\ClosureAttributesRule [1]
- PHPStan\Rules\Functions\FunctionAttributesRule [1]
- PHPStan\Rules\Functions\ParamAttributesRule [1]
- PHPStan\Rules\Methods\CallMethodsRule [1]
- PHPStan\Rules\Methods\CallStaticMethodsRule [1]
- PHPStan\Rules\Methods\MethodAttributesRule [1]
- PHPStan\Rules\Properties\PropertyAttributesRule [1]
- PHPStan\Rules\Properties\PropertyHookAttributesRule [1]
- PHPStan\Rules\Traits\TraitAttributesRule [1]