Why traits doesn't supports interfaces (via implements) like classes does? It could be useful when trait implements part of abstract functions from interface, then the class that uses this traits should implements the another part.
It could turn it possible (pseudo-code): interface VisibilityControlContract - public function isVisible(): bool; trait VisibilityControlTrait implements VisibilityControlContract - public function isVisible(): bool { ... } class UserModel (not need implements VisibilityControlContract directly) - uses VisibilityControlTrait; var_dump(new UserModel instanceof VisibilityControlContract); // true The disvantages that I can see with that is that without an IDE I could not identify easily if interface was implemented by some trait. But it too happen when I do implements an abstract class that implements some interface. -- David Rodrigues