RE: [PHP-DEV] [RFC] Enum proposal (yet another)

From: Date: Wed, 22 Feb 2012 21:43:41 +0000
Subject: RE: [PHP-DEV] [RFC] Enum proposal (yet another)
References: 1 2 3 4 5 6  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message

For those who keep saying "but this can already be done in php", here is a
pretty good article.
Long time ago enums were not available in Java also, so this article
explains that yes, thigs can technically could be done before the enum, and
why certain things are better with enums.

http://javarevisited.blogspot.com/2011/08/enum-in-java-example-tutorial.html

I think enums will be beneficial to php, but will add one more features that
people not familiar with it will have to learn about.

Dmitri Snytkine
Web Developer
Ultra Logistics, Inc.
Phone: (888) 220-4640 x 2097
Fax: (888) 795-6642
E-Mail: [email protected]
Web: www.ultralogistics.com

"A Top 100 Logistics I.T. Provider in 2011"


-----Original Message-----
From: Sebastian Krebs [mailto:[email protected]] 
Sent: Wednesday, February 22, 2012 4:31 PM
To: PHP internals list
Subject: Re: [PHP-DEV] [RFC] Enum proposal (yet another)

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).
>


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



Thread (70 messages)

« previous php.internals (#57965) next »