Re: Pre-RFC proposal: opt-in implicit interfaces / structural typing
| From: | Pedro Magalhães | Date: | Fri, 07 Nov 2025 22:20:35 +0000 |
| Subject: | Re: Pre-RFC proposal: opt-in implicit interfaces / structural typing | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-129143@lists.php.net to get a copy of this message | ||
On Fri, Nov 7, 2025 at 5:05 PM Spencer Malone <malone.spencer@gmail..com>
wrote:
> Hey all! Long time browser, first time emailer. I wanted to start a
> pre-RFC discussion on the proposal of opt-in implicit interfaces /
> structural typing / "golang style interfaces".
>
> I have an early mostly working POC at
>
> https://github.com/php/php-src/compare/master...SpencerMalone:php-src:implicit,
> and was curious if this was an idea that could get any traction as an RFC?
>
> For those who don't want to open the link, it's essentially:
>
> ```
> implicit interface Drawable {
> public function draw(): void;
> }
>
> class Circle {
> public function draw(): void {
> }
> }
>
> assert((new Circle()) instanceof Drawable); // This would be true
> ```
>
> There is some previous art around here in the form of...
>
> https://wiki.php.net/rfc/protocol_type_hinting - I
> couldn't find any
> discussion on this other than reading that the author withdrew all their
> RFCs for unrelated reasons I think? Some of the core ideas here I think are
> still relevant, although in my implementation I chose to use syntax that
> adds a keyword onto the interface rather than at the call sites because I
> wanted to provide the ability for interface definers to keep their
> interfaces as explicit if they wanted, as well as... Well honestly, adding
> angle brackets around objects feels like a syntax misstep since that
> pattern is very associated with generics in my mind. I could be convinced
> of this though if that's the syntax people prefer.
>
> https://externals.io/message/115554#115603 - Convinced me that
> others may
> want this as well, although again that proposed syntax ended up stepping on
> the toes of attributes. I do think this does a good job of explaining _why_
> I want this.
>
> - Spencer
>
>
Hi Spencer,
A few years ago I had a go at it. In case it is useful in any way, you can
check it in
https://github.com/php/php-src/compare/master...pmmaga:php-src:implicit-interfaces
Regards,
Pedro