Re: [Pre-RFC] Idea: named parameter lists

From: 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:
Hi list ! Just got an idea: params COOKIE_PARAMS {
    time() + 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:
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.unpacking
-- 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.com


« previous php.internals (#132250) next »