Re: [RFC] [Discussion] Optional interfaces

From: Date: Fri, 14 Mar 2025 14:24:48 +0000
Subject: Re: [RFC] [Discussion] Optional interfaces
References: 1 2  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
Hey Juris.

I have a question about this feature.

At the example blow

interface A
> {
>    public function x(Foo $foo);
> }
>
> interface B
> {
>    public function x(Bar $foo);
> }
>
> class Test implements ?A, ?B
> {
> }
>

what would happen if both interfaces existed?



пт, 14 мар. 2025 г. в 17:08, Jorg Sowa <[email protected]>:

> Hello Juris,
> There is some uncertainty for me on how this approach would work with
> namespaces.
>
> Let's get this example:
> https://3v4l.org/bI1Rj
>
> I would expect to get the error message that I forgot to insert `use
> Stringable;`.
> But with your idea everything is fine. I don't like such ambiguity and I
> worry it may bring some confusion to developers.
>
> Kind regards,
> Jorg
>
> On Sat, Dec 28, 2024 at 9:57 PM Juris Evertovskis <[email protected]>
> wrote:
>
>> Hi,
>>
>>
>>
>> I would like to propose a new syntax that let’s you implement an
>> interface only if it exists.
>>
>>
>>
>> class MyClass extends ?OptionalInterface {}
>>
>>
>>
>> If the OptionalInterface exists, the class implements it. If no such
>> interface can be found, it is ignored.
>>
>>
>>
>> https://wiki.php.net/rfc/optional-interfaces
>>
>>
>>
>> The need to declare compatibility with a certain interface without
>> requiring the interface itself comes up when you’re writing code that
>> should work with various versions of other libraries or PHP itself and when
>> a library provides interoperability with some other library or a PHP
>> extension, but does not require it.
>>
>>
>>
>> Although this would mainly be used by library developers, the consumers
>> of those libraries would also benefit as this syntax would clearly
>> communicate the intention of optional interoperability. IDEs and static
>> analysis tools could also have easier time with ?OptionalInterface
>> instead of class definitions inside an `if (interface_exists(…)) { … } else
>> {…}`.
>>
>>
>>
>> I’ve not entirely sure about the naming as an “optional interface” feels
>> like an oxymoron. I’ve also considered names like non-required interfaces,
>> conditional interfaces, optional/conditional implementation or even soft
>> interfaces/soft implementation. Please let me know if the naming itself
>> bothers you.
>>
>>
>>
>> Previous discussion: https://externals.io/message/125967
>>
>> WIP implementation: https://github.com/php/php-src/pull/17288
>>
>>
>>
>> Looking forward to your feedback and suggestions!
>>
>> Juris
>>
>


Thread (14 messages)

« previous php.internals (#126753) next »