Hi Sean, > On Oct 21, 2015, at 11:17 AM, Sean DuBois <s...@siobud.com> wrote: > > On Wed, Oct 21, 2015 at 03:54:48PM +0000, Dan Ackroyd wrote: >> Hi Sean, internals, >> >> While I support this RFC, it seems that the actual implementation is >> still under discussion. >> >> In particular, whether the RFC is going to allow protected constants >> in an interface is not clear. >> >> In the text of the RFC, on one line it says: "This RFC propose PHP >> support class constant visibility that mirror the behaviour of method >> and property visibility." This would imply that protected constants >> are not allowed, as protected methods are not allowed in interfaces. >> >> Just below it says: "//Interfaces only support protected/public const, >> and a compile time error will be throw for privates" Which says >> clearly that protected constants _would_ be allowed. >> >> Please can you update the text of the RFC? >> >> Unfortunately, that may need a restart of the voting :-\ However that >> should just be a formality as it seems to be a popular RFC. >> >> cheers >> Dan >> >> -- > Hi! > > That is an unfortunate mistake on my part. The *proper* way to adjust > visibility of a trait from a class constant is the following. > > trait myTrait { > public const FOO = 'bar' > } > > class myClass { > use myTrait { FOO as protected; } > } > > class myClass { > use myTrait { FOO as private; } > } > > We should not allow anything besides public in trait, this mirrors the design > of methods. > > If this is right (mind just sending an ACK to make sure I got it right this > time) I > will update the RFC. Who decides if/when we should restart voting? > > thanks > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php >
I think you may have misunderstood. Traits should be able to have protected and private constants. The issue that Dan pointed out is with an interface having a protected constant in the example code, contradicting what was written prior in the RFC about mirroring the current behavior of method and property visibility. Interfaces should only be allowed to have public constants. Protected constants would infer that the interface knows something about implementation, which doesn’t make sense for an interface. I think the RFC should be updated to remove this ambiguity. I’m not sure if this would require the vote to be restarted, as I doubt anyone who voted yes would now vote no with this change. Regards, Aaron Piotrowski -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php