This RFC proposes to allow an optional trailing comma in closure use lists. This is already supported for argument and parameter lists.
Consider this example:
$longArgs_longVars = function ( $longArgument, $longerArgument, $muchLongerArgument, // Trailing commas were allowed in parameter lists in PHP 8.0 ) use ( $longVar1, $longerVar2, $muchLongerVar3 ) { // body }; $longArgs_longVars( $longArgumentValue, $obj->longMethodCall(), $obj->longPropertyName ?? $longDefault, );
This closure declaration has too many parameters and closure use variables to place all of them on one line, at least under conventional coding standards. In such cases PSR-12 recommends using the formatting above instead (PSR-12 predates support for trailing commas in parameter lists).
Unfortunately, it is currently not possible to place a trailing comma in the closure use list. This breaks uniformity, and results in larger diffs when a new optional closure use variable is added. Additionally, it is inconsistent with parameter lists and call-sites, which do allow a trailing comma.
At this point, I'm used to always adding a trailing comma to multi-line lists, regardless of what kind of element they contain. We should avoid having this kind of arbitrary restriction.
Allow a single optional trailing comma in closure use lists.
Allow trailing comma in parameter list added support for trailing commas in parameter lists.
Allow a trailing comma in function calls added support for trailing commas in calls.
Trailing Commas In List Syntax was a previous proposal to support optional trailing commas in all list-like structures.
Nothing has substantially changed since those RFCs in technical terms, but I think the aforementioned style for breaking up large lists has become more accepted in the meantime.
None.
Yes/No, requiring 2/3 majority.
Voting starts 2020-07-15 and ends 2020-07-29.
0.2: Fix implementation link.
https://externals.io/message/110715 “Permitting trailing commas in closure use() declarations”
https://externals.io/message/110804 “[RFC] Allow trailing comma in closure use list”