> Am 18.09.2015 um 01:56 schrieb Rowan Collins <rowan.coll...@gmail.com>:
> 
> On 18/09/2015 00:16, Marcio Almada wrote:
>> A kitten is working on thathttps://wiki.php.net/rfc/enum. Many points
>> on the linked RFC are compatible to the points you raised so it might
>> be worth reading before even starting any new proposal.
> 
> Aha, I hadn't seen that, should have thought to search the wiki. Still, 
> interesting that we seems to mostly agree on the key decisions, although I've 
> gone into more detail about things that he's left as Future Scope, which is 
> fair enough.
> 
> The main thing I'd change if I was writing it is the implicit "ordinal" 
> property; I don't really see the point of insisting that the order I write 
> "Red, Green, Blue" has some meaning. On the other hand, I'd give much more 
> prominence to the name, e.g. by making values() return an associative array. 
> You're much more likely to want to say "the value whose name is 'RED'" than 
> "the value I defined first in the list", IMHO.
> 
> If you have some kind of initialiser syntax for the values - with or without 
> a constructor - you get to have ordinals or explicit values (like the Flags 
> example) if you want them, and just names if not:
> 
> enum RenewalAction{
>    Deny( 0 ),
>    Approve( 1 );
> 
>    public $ordinal;
> }
> enum Flags{
>    a (1  <<  0),
>    b( 1  <<  1),
>    c(  1  <<  2),
>    d(  1  <<  3 ); public $value; }
> 
> enum PimaryColours { RED, GREEN, BLUE }
> 
> Regards,
> 
> -- 
> Rowan Collins
> [IMSoP]

The reason it is not an associative array is that the names are not important.

But we actually need ordinal(), else we'll end up writing 
array_search(TheEnum::values(), $value).
It's mainly important for the purpose of serializing/unserializing (manually or 
internally).

You never should *rely* on the ordinal value of the enum for anything. Enums 
are supposed to be value-less. It's a type. It's not a value. The only usage of 
the value is going external.

Also, I honestly think the Flags example is a bad one. (At least as long as we 
don't have a possibility to typehint combined enums...). If you need that, use 
class constants. They provide exactly what you need.

Bob
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to