Trait constants

php.internals

Stephen Reay

6 years ago
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? Cheers Stephen

Mike Schinkel

6 years ago
> On Jun 27, 2020, at 9:52 AM, Stephen Reay <php-lists@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?
Yes. Please. -Mike

tyson andre

6 years ago

tyson andre

6 years ago

Nikita Popov

6 years ago
On Sat, Jun 27, 2020 at 3:53 PM Stephen Reay <php-lists@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

Stephen Reay

6 years ago
> On 28 Jun 2020, at 19:33, Nikita Popov <nikita.ppv@gmail.com> wrote: > > On Sat, Jun 27, 2020 at 3:53 PM Stephen Reay <php-lists@koalephant.com <mailto:php-lists@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
Hi All, I finally found some time to write something to get this started. I’m following the advice given, and putting this on GH initially, any and all comments/feedback/suggestions are welcome! https://github.com/stephenreay/php-rfcs/blob/master/trait-constants.md <https://github.com/stephenreay/php-rfcs/blob/master/trait-constants.md> Note: I realise it doesn’t lay out voting choices, target version etc: It seems more pertinent to focus on nailing down some kind of fixed target of what should be achieved, before detailing the when/etc. Cheers Stephen

Guilliam Xavier

5 years ago
On Sun, Jun 28, 2020 at 2:34 PM Nikita Popov <nikita.ppv@gmail.com> wrote:
> On Sat, Jun 27, 2020 at 3:53 PM Stephen Reay <php-lists@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. >
Sorry for asking so late, but: why? Note that currently both TraitName::$foobar and TraitName::foobar() work: https://3v4l.org/eGlYm Thanks,
-- Guilliam Xavier

Nikita Popov

5 years ago
On Wed, May 12, 2021 at 11:38 AM Guilliam Xavier <guilliam.xavier@gmail.com> wrote:
> > > On Sun, Jun 28, 2020 at 2:34 PM Nikita Popov <nikita.ppv@gmail.com> wrote: > >> On Sat, Jun 27, 2020 at 3:53 PM Stephen Reay <php-lists@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. >> > > Sorry for asking so late, but: why? > Note that currently both TraitName::$foobar and TraitName::foobar() work: > https://3v4l.org/eGlYm >
Yes, unfortunately this currently works by accident, but support for it will be removed ( https://wiki.php.net/rfc/deprecations_php_8_1#accessing_static_members_on_traits ). Regards, Nikita

Stephen Reay

5 years ago
> On 12 May 2021, at 16:44, Nikita Popov <nikita.ppv@gmail.com> wrote: > > On Wed, May 12, 2021 at 11:38 AM Guilliam Xavier <guilliam.xavier@gmail.com <mailto:guilliam.xavier@gmail.com>> > wrote: > >> >> >> On Sun, Jun 28, 2020 at 2:34 PM Nikita Popov <nikita.ppv@gmail.com> wrote: >> >>> On Sat, Jun 27, 2020 at 3:53 PM Stephen Reay <php-lists@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. >>> >> >> Sorry for asking so late, but: why? >> Note that currently both TraitName::$foobar and TraitName::foobar() work: >> https://3v4l.org/eGlYm >> > > Yes, unfortunately this currently works by accident, but support for it > will be removed ( > https://wiki.php.net/rfc/deprecations_php_8_1#accessing_static_members_on_traits <https://wiki.php.net/rfc/deprecations_php_8_1#accessing_static_members_on_traits> > ). > > Regards, > Nikita
Hi Nikita - thanks for your earlier input on this. As we’re heading towards 8.1 now seems as good a time as any to pick this back up. Any thoughts on https://github.com/stephenreay/php-rfcs/blob/master/trait-constants.md <https://github.com/stephenreay/php-rfcs/blob/master/trait-constants.md> ? Cheers Stephen

Guilliam Xavier

5 years ago
On Wed, May 12, 2021 at 12:22 PM Stephen Reay <php-lists@koalephant.com> wrote:
> > Any thoughts on > https://github.com/stephenreay/php-rfcs/blob/master/trait-constants.md ? >
Hi Stephen, I agree with what has already been said, i.e.: that's a desirable feature, but probably needs a proper RFC for more discussion. Regards,
-- Guilliam Xavier