On Sat, Dec 28, 2024, at 2:56 PM, Juris Evertovskis 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
Going by the design/RFC, this seems reasonable to me, and I can see the use for it. My only concern would be if the implementation makes anything more complex for the engine or compiler that could cause future optimization problems, but I'm not qualified to answer that. It may help the RFC to include some non-trivial real-world-ish examples, in addition to the A and B stuff. (You can probably steal some from the projects linked to.) --Larry Garfield