On Thu, Nov 26, 2020 at 5:53 PM Pierre R. <pierre-...@processus.org> wrote:

> Le 26/11/2020 à 17:50, David Rodrigues a écrit :
> > Hello!
> >
> > Now with PHP 8, traits supports abstract functions that should be
> > implemented by the class that uses this trait.
> >
> > So is it now possible that traits could have support to implements too?
> So
> > when class uses this trait, it will be an implementation of X interface
> and
> > will have to implement methods based on it.
> >
> > interface A {
> >      public function x();
> > }
> >
> > trait B implements A {
> >      public function y() { $this->x(); }
> >      // public function x() still not implemented.
> > }
> >
> > class Z { // impliticy implements A interface due to B trait.
> >      use B;
> >      public function x() {} // required!
> > }
> >
> >
> > Atenciosamente,
> > David Rodrigues
> >
> Hello,
>
> I'd love this too, but I'm not sure what would be the static code
> validation behavior, knowing that you can rename methods of traits when
> using them in a class: should the trait method not be validated ? Should
> the final class be validated after the trait has been used, meaning that
> if a method name change, the final class must re-implement it ?
>

Common misconception: It's not possible to rename methods of traits, you
can only create aliases. That said, there's still an issue in that you
might resolve a conflict in favor of an identically named method that uses
a different signature.

Note that Hack uses a "require implements" syntax instead, which makes it
clear that the interface needs to be implemented by the using class:
https://docs.hhvm.com/hack/classes/trait-and-interface-requirements

Regards,
Nikita

Reply via email to