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 it https://3v4l.org/lNjSX#vgit.master
