Hi Folks

Thanks for the replies. If interface default methods are not entirely off
the table, then I agree that's a far better option, for sure! I'll hold off
on writing my arguments for them until a thread pops up, I think it makes a
lot of sense though.

So consider the idea of traits + interfaces on hold until there's clarity
about interface default methods.

Kind regards
Brent

On Tue, Sep 10, 2024 at 11:03 PM Gina P. Banyard <intern...@gpb.moe> wrote:

> On Tuesday, 27 August 2024 at 09:25, Brent Roose <
> brent.ro...@jetbrains.com> wrote:
>
>
> Back to PHP, using traits as types seems impossible, since traits are a
> compile-time copy/paste mechanism, which means there’s no type information
> available about them at runtime.
>
> However, allowing traits to implement interfaces would solve this problem:
> these interfaces would be copied over to classes during compile-time, and
> the interface’s type information is available at runtime. On top of that,
> traits already have well-defined rules for conflict resolution, so we
> wouldn’t need any additional syntax to handle edge cases.
>
>
> Traits are very ill-suited for this because everything from a trait can be
> overwritten:
>
>
> trait T {
>     public function foo(string $v): int {}
> }
>
> class C {
>     use T;
>
>     public function foo(array $v): string {}
> }
>
>
> This is valid code, now imagine T implements interface I:
>
> interface I {
>
>    public foo(string $v): int;
>
> }
>
> C cannot implement I, moreover the conflict resolution mechanism just
> exposes more problems as you can rename a method from a trait, or change
> its visibility.
>
>
>
>    -
>
>    Even though it was not accepted, the interface default methods RFC
>    approached the problem from a different angle [4].
>    -
>
>    While a majority disagreed that interfaces should implement their own
>    methods directly, I remember it was a heavily debated topic, and believe
>    that approaching it from the other side might be easier to accept.
>
>
> One part of the contention came that this feature was proposed in June of
> 2023, weeks before feature freeze, and that no attempt at restricting the
> implementation of the default implementation was made.
> I still think default methods for interfaces make more sense then trying
> to fix traits, but also default implementations only really make sense for
> interfaces with multiple methods where one is a "core" method that remains
> abstract and the default implementations rely on it to be implemented.
>
>
> As such I am not really convinced of the utility of adding interface
> support for traits considering all the issues I can foresee happenning.
>
>
> Best regards,
>
> Gina P. Banyard
>
>
>
>
>
>

Reply via email to