Am 01.10.2026 um 02:29 schrieb Karoly Negyesi:
I submitted a draft RFC to https://github.com/php/php-src/pull/24030 <https://github.com/php/php-src/pull/24030>. The PR contains an implementation and tests (please be gentle, I haven't written C in decades).

I propose an "implements by" syntax to automate delegation, closely modelled on Kotlin.

In short,

interface T { function foo(); }
class A implements T { function foo() { print "A"; } }
class C implements T by $t { function __construct(private T $t) {} }
new C(new A)->foo();

The RFC motivates this feature with "unnecessary boilerplate and maintenance burden as the interface gets more methods over time". I think this premise is flawed: an interface that keeps gaining methods over time usually violates the Interface Segregation Principle. The remedy for that is smaller, more focused interfaces, not language support that makes delegating to ever-growing interfaces cheaper.

There is also a correctness concern: with generated forwarding, a method that is later added to the interface is silently delegated by every class that uses "implements ... by". In the RFC's own example, a new URL-generating method would be forwarded without the metadata bubbling that MetadataBubblingUrlGenerator exists for. Today, such a change forces the author of the decorator to make a conscious decision.

I am also not convinced that any benefit this may have outweighs its downsides: it adds new syntax that static analysis tools need to learn about, and it adds complexity to the compiler. The "To the Ecosystem" section currently only lists "Less boilerplate"; it should account for these costs as well.

--
Sebastian Bergmann                                 https://phpunit.expert

Stay up to date with PHPUnit: https://phpunit.expert/newsletter

Reply via email to