Re: [RFC]
| From: | Rowan Tommins | Date: | Wed, 12 Feb 2020 22:47:24 +0000 |
| Subject: | Re: [RFC] | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-108525@lists.php.net to get a copy of this message | ||
On 12/02/2020 03:58, Mike Schinkel wrote:
Returning a_closure_ instead of a string would be providing a feature we_already_ have instead of one we do_not_ have.Not really, because you still need a way to get the fully-qualified name of the function. This is not valid: namespace MyVendor\Something\Foo; function bar() {} \Closure::fromCallable('bar'); # Error: tries to resolve function '\bar' So if we had ::function which returned the name, and ::callable that returned a closure, the following would be equivalent: namespace MyVendor\Something\Foo; function bar() {} \Closure::fromCallable('MyVendor\Something\Foo\bar'); \Closure::fromCallable(bar::function); bar::callable; One combination would be ::function returning a string, and $() accepting one, which would give: $(bar::function) In practice, that would almost certainly be optimised into one instruction, so the main advantage would be consistency, unless there are use cases where a string rather than "any callable" is actually required.
Or today just use fn() => myfunc().That's not quite the same either: at the very least, you need to define it as fn(...$args) => myfunc(...$args) to pass through the parameters. But Closure::callable is able to copy the signature of the original function, including type information [1], so our hypothetical ::callable could do the same. [1] https://3v4l.org/XBOmJ Regards, -- Rowan Tommins (né Collins) [IMSoP]