Le 30/11/2020 à 16:19, Nikita Popov a écrit :
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

Sorry for the misconception/confusion.

Probably what's missing is something that looks like Java's interface with default methods, or something like that.

Very often you use traits to partially implement an interface, and leave room for classes using this "partial implementation" for inheriting from another class. It looks like multiple inheritance without being it. What is really needed when doing this is:

 * Your class using this trait must implement the interface,
 * The trait methods must be validated against the interface contract.

If I understand it well, when compiling PHP kinda copy-pastes the trait methods onto the class (trait doesn't exist as a type by itself, am I wrong?) then it validates the class, which solves the second point, trait methods are in the end, validated against the interface contract. What's missing here is the automatic interface usage, but more importantly, IDE support for the trait, and the information in the code that the trait does implement partially the interface (people who read the code cannot guess if it's mis-documented).

Regards,

Pierre

Reply via email to