====== PHP RFC: Allow trailing comma in parameter list ====== * Date: 2020-03-26 * Author: Nikita Popov * Status: Implemented * Target Version: PHP 8.0 * Implementation: https://github.com/php/php-src/pull/5306 ===== Introduction ===== This RFC proposes to allow an optional trailing comma in parameter lists. This is already supported for argument lists. Consider the constructor of the [[https://github.com/thephpleague/uri/blob/70e1b5044dbf923146a81a0869a67c71548cc880/src/Uri.php#L283-L302|League\Uri\Uri class]]: class Uri { private function __construct( ?string $scheme, ?string $user, ?string $pass, ?string $host, ?int $port, string $path, ?string $query, ?string $fragment // <-- ARGH! ) { ... } } This constructor has too many parameters 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/#45-method-and-function-arguments|PSR-12]] recommends to use the formatting above instead. Unfortunately, it is currently not possible to place a trailing comma in the parameter list. This breaks uniformity, and results in larger diffs when a new optional parameter is added. Additionally, it is inconsistent with call-sites, which **do** allow a trailing comma: new Uri( $scheme, $user, $pass, $host, $port, $path, $query, $fragment, // <-- Huh, this is allowed! ); At this point, I'm used to //always// adding a trailing comma to multi-line lists, regardless of what kind of element they contain. I write the comma by default, and then have to go back to remove it upon receiving an error. We should avoid having this kind of arbitrary restriction. ===== Proposal ===== Allow a single optional trailing comma in parameter lists. This includes parameter lists for functions, methods and closures. ===== Prior Art ===== [[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 parameter lists has become more accepted in the meantime, and features like [[rfc:constructor_promotion|Constructor Property Promotion]] are going to increase its use further. ===== Backward Incompatible Changes ===== None. ===== Vote ===== Voting opened 2020-04-14 and closes 2020-04-28. * Yes * No