On Fri, Nov 7, 2025, at 1:19 PM, Rowan Tommins [IMSoP] wrote: > On 07/11/2025 17:05, Spencer Malone 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". > > > Hi and welcome :) > > In general, I prefer explicit code over implicit, so wouldn't be an > enthusiastic supporter of this (although I might abstain rather than > voting against). > > However, I though it worth mentioning that PHP has one implicit > interface already: any class with an __toString() method magically > implements Stringable. I've never really understood why, or why that > interface even exists; but at least having a general concept of > "implicit interface" would make it less magical.
__toString() is *old*. It may go all the way back to 5.0, but it was there at least as of 5.2. The problem is that there was no way to type against it. You could type `string`, but not `string or object that implements string`. When we got union types in 8.0, that was tempting but not yet possible. So Stringable was added basically for typing against `string|Stringable`. And it was made implicitly added because there were a bajillion __toString() functions in the wild already that shouldn't have to be modified before you could type against them. </history lesson> --Larry Garfield
