Re: [PHP-DEV] [Pre-RFC] Idea: named parameter lists
Henrik Skov <[email protected]>
| Newsgroups | gmane.comp.php.devel |
|---|---|
| Message-ID | <[email protected]> |
On 18/08/2026 14.17, Kamil Tekiela wrote: > On Tue, 18 Aug 2026 at 12:35, Henrik Skov<[email protected]> wrote: >> On 18/08/2026 12.52, AllenJB wrote: >> >> On 2026-08-18 11:02, Henrik Skov wrote: >> >> 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, >> ]; >> >> [...] >> >>>> sleep(100); >>>> >>>> var_dump(time()); // -> 1787047284 >>>> >>>> fakeSetCookie("testName", "testValue", ...COOKIE_PARAMS); so >>>> expires_or_options become 1787050884 >> Ah, I think I understand now. >> >> What you're proposing is a structure where you can define a value as an expression, and that expression is only evaluated when the structure is used (rather than when it's defined). >> >> So, even in a long-lived application, the expires_or_options value would always be evaluated as `time() + 3600` >> >> If this were to be implemented, I think it would be better to look at values, rather than defining an entire structure. I can see it being used for more than parameters. >> >> Something like an IIFE that's invoked when used rather than when defined. >> >> >> As a side-note, one way to achieve this in current PHP would be to use a callable: >> >> ```php >> $params = function() { >> return [ >> "samesite" => "Lax", >> "expires_or_options" => time() + 3600, >> "path" => "/", >> "domain" => "", >> "secure" => false, >> "httponly" => true, >> ]; >> }; >> >> fakeSetCookie("testName", "testValue", ...$params()); >> sleep(2); >> fakeSetCookie("testName", "testValue", ...$params()); >> ``` >> >> (3v4l refused to save this, probably because it takes too long) >> >> This can also be written using arrow functions: >> >> ```php >> $params = fn() => [ >> "samesite" => "Lax", >> "expires_or_options" => time() + 3600, >> "path" => "/", >> "domain" => "", >> "secure" => false, >> "httponly" => true, >> ]; >> ``` >> >> -- >> >> Yes, but I think one should consider params COOKIE_PARAMS {...} more of a type ! > Then why not create a type for ithttps://3v4l.org/lNjSX#vgit.master -- Because it is not worthy of a full class. By the same logic, why do we have enums ? A class of constants works just as fine as an enum ? Maybe I shouldn't have said 'type' - What I meant was language construct I think Med venlig hilsen Henrik Skov /HSK Consulting/ Blegdamsvej 128B, 4 DK-2100 Copenhagen O Tel.: +45 27 62 83 01 Email: [email protected]