Re: [Discussion] Callable types via Interfaces
| From: | Michał Marcin Brzuchalski | Date: | Tue, 25 Apr 2023 18:20:40 +0000 |
| Subject: | Re: [Discussion] Callable types via Interfaces | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-120129@lists.php.net to get a copy of this message | ||
Hi Nicolas,
wt., 25 kwi 2023, 19:00 użytkownik Nicolas Grekas <
nicolas.grekas+php@gmail.com> napisał:
> Hi all,
>
>
>
> https://wiki.php.net/rfc/allow_casting_closures_into_single-method_interface_implementations
> >
> >
>
> https://wiki.php.net/rfc/allow-closures-to-declare-interfaces-they-implement
> > https://wiki.php.net/rfc/structural-typing-for-closures
>
>
> Thanks Larry for the nice introduction to those ideas.
>
> Personally, I feel like going with adding Closure::castTo() might provide
> the most immediate benefit. I expanded the rationale on the corresponding
> RFC and added more examples. I'd appreciate it if all of you reading could
> have another look to see if that helps to better understand the proposal.
>
> strtr(...)->castTo(TranslatableInterface::class) is one example of RFC #1
> function ($message, $parameters) implements TranslatableInterface is RFC #2
>
> Both RFCs nicely combine together to cover many cases of typed callabled.
>
> Then RFC#3 is a bit more adventurous (according to our understanding) but
> still desirable as it's essentially about allowing the engine to
> tentatively call castTo() from RFC#1 when a closure is passed as argument
> while an interface is expected.
>
Personally I don't like this way of shaping callable types. Given examples
are really confusing me. Call of a castTo() with argument representing an
interface with a method is confusing as the method magically appears on a
closure without explicit binding to it! What if an interface has more than
one method? What if I wanna choose which one?
For me personally this goes into wrong direction.
Cheers,
Michał Marcin Brzuchalski
>