Re: [Pre-RFC] Idea: named parameter lists
| From: | Henrik Skov | Date: | Tue, 18 Aug 2026 10:02:08 +0000 |
| Subject: | Re: [Pre-RFC] Idea: named parameter lists | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-132250@lists.php.net to get a copy of this message | ||
Hi again !
The important part is that any instantiations and function calls are evaluated at call-time and not compile time !
So time() would return the timestamp at time of call and not when compiler first encounters the COOKIE_PARAMS const array. The new params keyword would make this clear to the compiler
/Henrik
On 18/08/2026 11.43, Henrik Skov wrote:
Thanks for the feedback. Problem with your re-written example is that it works with/depends on global variables... I was the code below actually worked: <?php const COOKIE_PARAMS = ["samesite" => "Lax", "expires_or_options" => time() + 3600, // Let's say time is 1787047184 "path" => "/", "domain" => "", "secure" => false, "httponly" => true,]; function fakeSetCookie(string $name, string $value = "", int $expires_or_options = 0, string $path = "", string $domain = "", bool $secure = false, bool $httponly = false, string $samesite = "Strict",) {var_dump([ "name" => $name, "value" => $value, "expires_or_options" => $expires_or_options, "path" => $path, "domain" => $domain, "secure" => $secure, "httponly" => $httponly, "samesite" => $samesite, ]);} sleep(100); var_dump(time()); // -> 1787047284
fakeSetCookie("testName", "testValue", ...COOKIE_PARAMS); so expires_or_options become 1787050884 But sadly, it does not work: Fatal error: Constant expression contains invalid operations in /tmp/x.php on line 2 /Henrik On 18/08/2026 11.34, AllenJB wrote:On 2026-08-18 10:12, Henrik Skov wrote:-- Med venlig hilsen Henrik Skov /HSK Consulting/ Blegdamsvej 128B, 4 DK-2100 Copenhagen O Tel.: +45 27 62 83 01 Email: henry.wood.dk@gmail.com -- Med venlig hilsen Henrik Skov /HSK Consulting/ Blegdamsvej 128B, 4 DK-2100 Copenhagen O Tel.: +45 27 62 83 01 Email: henry.wood.dk@gmail.comHi list ! Just got an idea: params COOKIE_PARAMS {PHP already has named parameters[0], and this can be combined with array unpacking[1] to produce basically the same as you're requesting here: https://3v4l.org/kD27a#v (Note: I've purposely moved the samesite parameter to prove the named array keys are mapping to the named function parameters, and not just working because they happen to be in order) [0] https://www.php.net/manual/en/functions.arguments.php#functions.named-arguments [1] https://www.php.net/manual/en/language.types.array.php#language.types.array.unpackingtime() + 3600, // Duration - NOTE: any expression is allowed here except pure variables '/', // Path '', // Can't remember what this is... (! IS_DEV), // secure — set true once served over HTTPS (production) TRUE, // httpOnly 'Lax', // Lax|Strict} Instead of this: (I am using Swoole)$response->cookie( self::COOKIE_NAME, $token, time() + 3600, '/', '', (! IS_DEV), // secure — set true once served over HTTPS TRUE, // httpOnly 'Lax', );we could do:$response->cookie( self::COOKIE_NAME, $token, :::COOKIE_PARAMS );I know it is kind of similar to the spread operator but not quite. What do you guys think ?Email: