PHP RFC: Allow trailing comma in closure use lists
- Version: 0.2
- Date: 2020-07-01
- Author: Tyson Andre tandre@php.net
- Status: Implemented
- Target Version: PHP 8.0
- Implementation: https://github.com/php/php-src/pull/5793
Introduction
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.
Proposal
Allow a single optional trailing comma in closure use lists.
Prior Art
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.
Backward Incompatible Changes
None.
Vote
Yes/No, requiring 2/3 majority.
Voting starts 2020-07-15 and ends 2020-07-29.
Changelog
0.2: Fix implementation link.
Discussion
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”