On Sat, Jun 27, 2020 at 3:53 PM Stephen Reay <php-li...@koalephant.com> wrote:
> Hi, > > It’s always struck me as slightly odd that traits don’t support constants > the way classes and interfaces do. > I tried to find an explanation of the lack of support in the original RFC, > and came up empty. > > A consequent discussion in R11 has led me here. > Can anyone working on internals explain why traits don’t allow constants > (either technically or philosophically)? > Moreover, what’s the opinion(s) of the list, on adding support for this? > Would an RFC be needed? > Sounds like a reasonable addition. An RFC will be needed to specify the details, which tend to be tricky whenever traits are involved. Some suggestions: * Constants mustn't be accessible directly on the trait, i.e. TraitName::FOOBAR throws. self::FOOBAR within the trait is legal in that "self" is remapped to the using class, as usual. * The same constants important from multiple traits should follow the rules of properties, i.e. require that values match. Conflict resolution for constants should very much *not* be supported. Regards, Nikita