Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:88302 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 87308 invoked from network); 18 Sep 2015 00:15:53 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 18 Sep 2015 00:15:53 -0000 Authentication-Results: pb1.pair.com header.from=bobwei9@hotmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=bobwei9@hotmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain hotmail.com designates 65.55.111.104 as permitted sender) X-PHP-List-Original-Sender: bobwei9@hotmail.com X-Host-Fingerprint: 65.55.111.104 blu004-omc2s29.hotmail.com Received: from [65.55.111.104] ([65.55.111.104:57593] helo=BLU004-OMC2S29.hotmail.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id A2/60-19961-6B75BF55 for ; Thu, 17 Sep 2015 20:15:51 -0400 Received: from BLU436-SMTP36 ([65.55.111.71]) by BLU004-OMC2S29.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Thu, 17 Sep 2015 17:15:47 -0700 X-TMN: [V1NygGfSopu7/FsKcTrxC11bXB3Dj88a] X-Originating-Email: [bobwei9@hotmail.com] Message-ID: Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 (Mac OS X Mail 8.2 \(2104\)) In-Reply-To: <55FB533F.7080301@gmail.com> Date: Fri, 18 Sep 2015 02:15:43 +0200 CC: PHP internals Content-Transfer-Encoding: quoted-printable References: <55FB4791.4040807@gmail.com> <55FB533F.7080301@gmail.com> To: Rowan Collins X-Mailer: Apple Mail (2.2104) X-OriginalArrivalTime: 18 Sep 2015 00:15:45.0478 (UTC) FILETIME=[29ACFE60:01D0F1A7] Subject: Re: [PHP-DEV] Let's discuss enums! From: bobwei9@hotmail.com (Bob Weinand) > Am 18.09.2015 um 01:56 schrieb Rowan Collins = : >=20 > On 18/09/2015 00:16, Marcio Almada wrote: >> A kitten is working on thathttps://wiki.php.net/rfc/enum. Many points >> on the linked RFC are compatible to the points you raised so it might >> be worth reading before even starting any new proposal. >=20 > Aha, I hadn't seen that, should have thought to search the wiki. = Still, interesting that we seems to mostly agree on the key decisions, = although I've gone into more detail about things that he's left as = Future Scope, which is fair enough. >=20 > The main thing I'd change if I was writing it is the implicit = "ordinal" property; I don't really see the point of insisting that the = order I write "Red, Green, Blue" has some meaning. On the other hand, = I'd give much more prominence to the name, e.g. by making values() = return an associative array. You're much more likely to want to say "the = value whose name is 'RED'" than "the value I defined first in the list", = IMHO. >=20 > If you have some kind of initialiser syntax for the values - with or = without a constructor - you get to have ordinals or explicit values = (like the Flags example) if you want them, and just names if not: >=20 > enum RenewalAction{ > Deny( 0 ), > Approve( 1 ); >=20 > public $ordinal; > } > enum Flags{ > a (1 << 0), > b( 1 << 1), > c( 1 << 2), > d( 1 << 3 ); public $value; } >=20 > enum PimaryColours { RED, GREEN, BLUE } >=20 > Regards, >=20 > --=20 > Rowan Collins > [IMSoP] The reason it is not an associative array is that the names are not = important. But we actually need ordinal(), else we'll end up writing = array_search(TheEnum::values(), $value). It's mainly important for the purpose of serializing/unserializing = (manually or internally). You never should *rely* on the ordinal value of the enum for anything. = Enums are supposed to be value-less. It's a type. It's not a value. The = only usage of the value is going external. Also, I honestly think the Flags example is a bad one. (At least as long = as we don't have a possibility to typehint combined enums...). If you = need that, use class constants. They provide exactly what you need. Bob=