On Thu, Dec 31, 2020, at 4:02 AM, Michał Marcin Brzuchalski wrote: > Hi Larry,
> I really like the shape of the current RFC. > > I'd like to ask a few things: > > 1. Regarding the Scalar Enums since scalar values need to be literal and > by design they're read only why they use a spear "->value" on enumeration? > A spear "->" in objects is dedicated to class properties and by default > they make thinking of property which > in most cases is read-write visible. > > An example using Suit enumeration from RFC: > // when I assign an enumeration to variable > $var = Suit::Spades; > // then reaching it's value using "->value" > echo $var->value; // 'C' > // Looks just like an object property fetch > > By default if a property is visible it is write accessible as well, which > may confuse. > > Instead of using spear "->value" would it be possible to fetch the value > just like object constants? > > print Suit::Clubs::value; // 'C' > echo $var::value; // 'C' > > This mentally indicates by default that it's value is constant, simple > scalar value and read only! We originally used a method in the first draft. We changed it to a property for three reasons. 1) There's lots of talk lately about immutable properties, so one way or another "it's a property so I can write to it" is an assumption that won't hold much longer. 2) The property has to exist internally anyway, because under the hood it's just a class with a property, so the name would still be reserved either way. 3) Given 1 and 2, adding a method on top just adds some micro overhead for the method call. A constant-esque syntax wouldn't be possible because under the hood, the cases are objects now, not classes. We could put constants on Suit, but Suit::Clubs is an object, and objects can't have constants independent of their class. > 2. Regarding the Scalar Enums declaration syntax > > enum Suit: string { > case Hearts = 'H'; > } > > Would it make sense to move the part declaring enumeration value before > enum name? > I think it was put here to look similar to function return type, but IMHO > it looks better and reads easier > when moved before enum name: > > enum:string Suit { > case Hearts = 'H'; > } > > Leaving the space between enum name and bracket for further extensions in > future. > What do you think? That would be a very one-off syntax. The colon-suffix is already established in PHP, and i the same as the syntax used in Swift. What you're describing looks a lot more like a generic. Which... I suppose in some ways this is if you squint really hard? I don't have much of an argument against it other than aesthetic. I have no idea what the parser would do with it. --Larry Garfield -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php