Re: [RFC] Enum proposal (yet another)

From: Date: Wed, 22 Feb 2012 21:30:57 +0000
Subject: Re: [RFC] Enum proposal (yet another)
References: 1 2 3 4 5  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
Am 22.02.2012 22:22, schrieb Ángel González:
On 22/02/12 09:37, Sebastian Krebs wrote:
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?
I want to call it doSomething(FOO) or doSomething(MyEnum::FOO), not doSomething(new MyEnum(MyEnum::FOO));
// The class file class MyEnum {
     public static $FOO;
     public static $BAR;
     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; }
} /* static code block */ { // As long as PHP doesn't support "constant references" (;)) // (--> constants with objects or arrays) MyEnum::$FOO = new MyEnum(MyEnum::FOO); MyEnum::$BAR = new MyEnum(MyEnum::BAR); } // End class file // Somewhere deep within some other code doSomething (MyEnum::$FOO); However, I can't see, what is the big thing, that isn't currently not possible (except any "I want"-argumentation :X) Sidenote, according your examples above on how you want call functions: Considered using normal constants?
+1 for adding enums (although I'm open to variations from that exact proposal).


Thread (70 messages)

« previous php.internals (#57963) next »