> Am 18.09.2015 um 02:27 schrieb Ryan Pallas <derokor...@gmail.com>:
> 
> I few questions wrt the rfc: https://wiki.php.net/rfc/enum
> 
>> An enum value is only equal to itself.
> I'm not sure I agree. How then do I store the enum into a DB and compare it
> after reading?
> switch($db->query('select role from user where user_id = 123')->fetch()[0])
> {
>  case UserRole::Admin:
>      include 'admin.php';
>      break;
>  case UserRole::User;
>      include 'user.php';
>      break;
>  default:
>      include 'login.php';
>      break;
> }
> Would this not ALWAYS include login if UserRole is an enum (instead of a
> final class with constants as I use now, which a switch like this will work
> for)?  Is this only possible with the magic value method? In which case I'd
> have to check the value method, something like case
> UserRole::Admin->ordinal() (or name, or value or whatever)?

You could use UserRole::values()[$ordinal] and then compare against that.

>> This means that if the name enum is used for a property, function,
> method, class, trait or interface there will now be a parse error instead.
> Surely, a property can be named enum, since it can be named other reserved
> words, for example?
> $ php
> <?php
> class Foo {
>  public $function = 'callMe';
>  public $trait = 'useMe';
>  public $class = 'instantiateMe';
> }
> $f = new Foo();
> var_dump(get_object_vars($f));
> 
> array(3) {
>  'function' =>
>  string(6) "callMe"
>  'trait' =>
>  string(5) "useMe"
>  'class' =>
>  string(13) "instantiateMe"
> }

Obvious mistake in the RFC, I just changed it...

> Also, I really like the idea of being able to type hint the enum in the
> switch(UserRole) that was mentioned. Not sure I like the idea of an
> implicit throw though, consider the UserRole above, I might have 10
> different roles, but the current switch is only valid for 5 of those roles.
> In this situation, if I add a default: return Auth::NotAuthorized; will
> that supress the implicit fall throw? If so, how often will the implicit
> throw really be hit? I know we have standards that all case statements must
> have default statements, to make sure every case is handled, whether we
> foresaw it or not.

I'd really put that under Future Scope through. It's not really important to 
the feature of Enums themselves and always can be added later on.

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

Reply via email to