====== PHP RFC: Allow trailing comma in closure use lists ====== * Version: 0.2 * Date: 2020-07-01 * Author: Tyson Andre * 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 [[https://www.php-fig.org/psr/psr-12/#7-closures|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 ===== [[rfc:trailing_comma_in_parameter_list|Allow trailing comma in parameter list]] added support for trailing commas in parameter lists. [[rfc:trailing-comma-function-calls|Allow a trailing comma in function calls]] added support for trailing commas in calls. [[rfc:list-syntax-trailing-commas|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. * Yes * No ===== 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"