Re: Optional interfaces
| From: | Rob Landers | Date: | Sat, 16 Nov 2024 09:23:49 +0000 |
| Subject: | Re: Optional interfaces | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-125971@lists.php.net to get a copy of this message | ||
On Sat, Nov 16, 2024, at 01:27, Marco Aurélio Deleu wrote:
>
>> On 15 Nov 2024, at 20:42, Rob Landers <rob@bottled.codes> wrote:
>>
>> On Sat, Nov 16, 2024, at 00:34, Juris Evertovskis wrote:
>>> Hey all,
>>>
>>> If you try to implement an interface that does not exist, you get the ‘Interface
>>> “%s” not found’ error. Usually that’s useful as it points to a code error.
>>>
>>> However, sometimes we want our code to be compatible with an optional library. For
>>> example, my Expression class might be compatible with some ORM, but it would also usable without it
>>> or with another ORM. This can already be accomplished, but the solutions seems very workaroundish:
>>> https://stackoverflow.com/questions/57996429/implements-interface-only-if-exists
>>>
>>> Maybe the PHP itself should allow marking some interfaces as optional — such that
>>> they are discarded from the list if the interface class does not exist? Here’s one way the syntax
>>> could look like:
>>>
>>> class Expression implements MyInterface, ?OptionalInterface {}
>>>
>>> interface EventDispatcherInterface extends ?PsrEventDispatcherInterface {}
>>>
>>> BR,
>>> Juris
>>
>> Hey Juris,
>>
>> Is there some reason you cannot do this:
>>
>> https://3v4l.org/hF1vr
>>
>> — Rob
>
> That seems to match what he shared on SO link?
Thanks Marco,
I don't visit stackoverflow because I loath "features locked behind internet points".
Thanks for letting me know what is behind the link!
>
> I think I opened this email with a strong negative feeling towards what would be optional
> interface, but to be honest a syntax sugar where implements ?MyInterface becomes something pretty
> close to what Rob shared doesn’t sound bad, it’s just convenience. Unfortunately PHP is not keen
> on being open to those.
>
> Overall, I dig it.
I maintain a PHP SDK that needs to be compatible with Symfony and Laravel and any other framework.
The shenanigans are all bound in one file that I very rarely touch. So, I do kinda like the idea of
having optional interfaces, but I feel like it is rather niche. As an application developer, I
can't think of one time I've ever needed this.
However, the single biggest advantage comes from IDEs that can somehow show that there is an
optional interface on a type. I think that would be the most useful bit to come from this, honestly.
It also prevents IDEs or static analysis from giving a warning that there are multiple definitions
of an interface if you have the appropriate libraries installed.
It's also rather simple to implement, so I think it is worth pursuing, IMHO.
— Rob