[Proposal] call_user_func_map(): flexible named parameter mapping for call_user_func*

From: Date: Sun, 27 Jun 2021 14:39:10 +0000
Subject: [Proposal] call_user_func_map(): flexible named parameter mapping for call_user_func*
Groups: php.internals 
Request: Send a blank email to internals+get-115166@lists.php.net to get a copy of this message
The short proposal:


Make a variation of this work (notice parameter order and 'b' is goes unused):

    call_user_func_map(
      fn ($c, $a) => var_dump($a, $c),
      [
        'a' => 'the a value',
        'b' => 'the b value',
        'c' => 'the c value'
      ]
    );
    // string(11) "the a value"
    // string(11) "the c value"
The long proposal: Callables, Closures, Anon Funcs, etc - have enjoyed increasing popularity year over year. We've even gotten a shorter syntax for them fn () and more RFC's are sure to be on their way. This proposes a method for a publisher/framework/producer (the caller of the callback) to document all the parameters that are available as named parameters, and subscribers/consumers (creator of the callback) could subscribe to what they need by name. For example:
    // documented callback parameters, this is what is available:
    $params = [
      'a' => 'value for a',
      'b' => 'value for b',
      'c' => 'value for c'
    ];
    // a consumer only interested in $a and $c could write:
    $f = fn ($c, $a) => var_dump($a, $c);
The consumer would then register their callback with the producer/framework/etc or pass as the parameter to whatever is consuming it
    $callbackSystem->register('some_event', $f)
    // or
    $doSomething->with($f);
The framework could then call with success:
    call_user_func_map($usersCallable, $allAvailableNamedParameters);
Currently the only way to do this is through array_diffing parameters found via Reflection, then passing them along to call_user_func_array() as a named array. Attempting to use call_user_func_array() without specifying all provided variables results in:
    Uncaught Error: Unknown named parameter X in ...
Thoughts?

Thread (9 messages)

« previous php.internals (#115166) next »