> Am 18.09.2015 um 01:52 schrieb John Bafford <jbaff...@zort.net>:
> 
> On Sep 17, 2015, at 19:16, Bob Weinand <bobw...@hotmail.com> wrote:
>> 
>>> Am 18.09.2015 um 01:06 schrieb Rowan Collins <rowan.coll...@gmail.com>:
>>> 
>>> This has come up in passing a few times recently, but I'm not sure there's 
>>> ever been a dedicated discussion of it: would it be useful for PHP to have 
>>> a built-in Enumeration type, and if so, how should it look?
>> 
>> I like enums in general, but I'd like to note that there's already a RFC in 
>> draft by Levi:
>> 
>> https://wiki.php.net/rfc/enum <https://wiki.php.net/rfc/enum>
>> 
>> As far as I know, the RFC is already fairly final and just lacks an 
>> implementation.
>> 
>> So, I'd consider bikeshedding an actual RFC first.
> 
> If we’re bikeshedding, one feature I would really like to see, with 
> typehinting, is warnings if all cases of an enum aren’t handled in a switch. 
> So, for example, given our example Weekdays enum, if I wrote this code:
> 
> switch(Weekday $someWeekday) {
>       case Weekday::MONDAY: break;
>       case Weekday::TUESDAY: break;
> }
> 
> By providing the typehint, I’m indicating that I want to get a warning/error 
> that the switch does not cover all enum values. This would be very handy if 
> an enum value is added after initial development and someone misses a switch 
> statement in cleanup.
> 
> The typehint would also allow generating a warning if someone did something 
> like
> 
> switch(Weekday $someWeekday) {
>       //case … all the weekdays: break;
>       case ‘I am not a Weekday’: echo ‘Generate a fatal error here because 
> string is not a Weekday.’;
> }
> 
> -John

So, you mean like an implicit
default: throw Error("Unhandled enum value Weekday::FRIDAY");

Possible, but then you also just can add
default: assert(0);
instead of a typehint.

At compile-time won't be really possible, as, when the switch is encountered, 
the enum might not yet have been loaded. That's one of the consequences of 
PHP's lazy inclusion system...

Bob


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

Reply via email to