My point is that *although* it's certainly possible to do almost everything I want already, I
should not have to write all that boilerplate for each enum.
I would much prefer to write something like 'enum { A, B, C }' rather than write a full
class for the enum, duplicate each enum value multiple times (your example repeats 'foo'
and 'bar' three times each), overload the __toString() magic method, do manual error
handling in the constructor, etc.
Since PHP provides no way to overload the equality operator, any solution that tries to emulate
enums as Samuel or I have written about will be flawed.
On Wednesday, 22 February 2012 at 7:37 PM, Sebastian Krebs wrote:
> 2012/2/22 Charlie Somerville <[email protected]
> (mailto:[email protected])>
>
> > Right, but enums could possibly be a lot richer than class constants are
> > now.
> >
> > They could be a type where the only values are what's defined in the enum.
> > This could be used with type hinting:
> >
> > enum Foo {
> > A,
> > B,
> > C
> > }
> >
> > function bar(Foo $x) {
> > // ...
> > }
> >
>
>
>
> class MyEnum {
> const FOO = 'foo';
> const BAR = 'bar';
> private $value;
> public function __construct ($value) {
> if (!in_array($value, array(self::FOO, self::BAR)) throw new
> UnexpectedValueException;
> $this->value = $value;
> }
> public function __toString () { return $this->value; }
> }
>
>
> function doSomething (MyEnum $foo) { /* code */ }
>
>
> What I wanted to say: I don't see, what is not possible already?
>
>
>
> >
> > There'd be no need to do any manual checking that $x is a valid value.
> >
> > Perhaps enum values could also be casted back to strings:
> >
> > (string)Foo::B; // "B"
> >
> > Sure, this is the kind of stuff that's possible in other ways already, but
> > first class support always helps.
> > On Feb 22, 2012 4:14 PM, "Laruence" <[email protected]
> > (mailto:[email protected])> wrote:
> >
> > > On Wed, Feb 22, 2012 at 12:45 PM, Samuel Deal <[email protected]
> > > (mailto:[email protected])>
> > > wrote:
> > > > Hi all,
> > > >
> > > > I really missed enums in PHP,
> > > Why? we have class constant.
> > >
> > > thanks
> > > > So after reading I tryed to synthetise the various views.
> > > >
> > > > You can find a draft here :
> > > > https://github.com/SamNrique/php-src/wiki/RFC-draft
> > > > (I can't write on the wiki, and perhaps it's better to finish the
> > > > discussion first)
> > > >
> > > > There's an implementation with this draft.
> > > > I'd love to have feedbacks because it's my first php-core hack.
> > > >
> > > > Thanks
> > > > --
> > > > Samuel Déal
> > > > [email protected] (mailto:[email protected])
> > > >
> > >
> > >
> > >
> > >
> > > --
> > > Laruence Xinchen Hui
> > > http://www.laruence.com/
> > >
> > > --
> > > PHP Internals - PHP Runtime Development Mailing List
> > > To unsubscribe, visit: http://www.php.net/unsub.php
> > >
> >
> >
>
>
>