Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:123421 X-Original-To: internals@lists.php.net Delivered-To: internals@lists.php.net Received: from php-smtp4.php.net (php-smtp4.php.net [45.112.84.5]) by qa.php.net (Postfix) with ESMTPS id 76E861A009C for ; Thu, 23 May 2024 18:34:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1716489339; bh=JcMlT2MJ4sI2yg0/Xk5shsfxfdg3PFgWqYiP0ilOMa8=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From; b=IC27pUr58Qj2sgtWPrpYIGzIUQhEXi9DZFIgyIwqIQYPAlX24MNaVWe8xBMxdcRkG KP9ssw+51TXIFHacst0uIiYE9+WzEUlQ6HSzaj8MtkwCEHFdDyzo5nZ4qGjhmN8ho6 pO/zZD1YbCpanUml7iQScjnEnk0QmbLjEwP/nMaz8yn6pTTNpVsHV5IrN8gNwh/xo6 6kq6YPexxMxk76wfrGzGJmm+7bFM2oWaBl0OIhn6x3dvef5pfPtlgDUI8lxeHhyt0P bhWp3aZavEdwAmd7xEnTeM2xl/plgHbSSBi1tJihi1tH+/wRcKWgJCkriZbAayElV3 ZB7rQJjg96l7w== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 15054180875 for ; Thu, 23 May 2024 18:35:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_50,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_MISSING,SPF_HELO_PASS, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=4.0.0 X-Spam-Virus: Error (Cannot connect to unix socket '/var/run/clamav/clamd.ctl': connect: Connection refused) X-Envelope-From: Received: from trowski.net (trowski.net [162.213.173.168]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Thu, 23 May 2024 18:35:37 +0000 (UTC) Received: from smtpclient.apple (unknown [10.0.1.100]) by trowski.net (Postfix) with ESMTPSA id 0474A126B284; Thu, 23 May 2024 13:34:32 -0500 (CDT) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/simple; d=trowski.com; s=mail; t=1716489278; bh=7JIhS3UcaIL0yRi+2ZS9AIjZBTI=; h=Subject:From:In-Reply-To:Date:Cc:References:To; b=Xj19F3xuDdV8AI3NqZl9JZRHGQTKMsas7/AVSskRDuyKwViMrkw/hqzYIvgJDtKtO MG9CTA5k6zY+CwQBVOBa9Tfs64cLGmOM5kk827MM4fepebrsqCHLgcV0HWzbUrg3oS Ds1AxBG4qzAoV8PnqRyfwPQRLZqJuESJEgRJVEvongdqS9pFCLZd0PAgcGsjYPnt9i UDrWUuhWw4CbvCKr0mVl23nPC/pekPwMevuMnmgBx2kwMsZOu8VUU8QaVsv+YqdOD8 uRfgJVj/1Jn/r1WHUJOwXiamUf8UsNND4T4TLeC2kx7QxBtqVd7BAbODmj0ZwamYDx TVg4XEd1qeGhg== Content-Type: text/plain; charset=utf-8 Precedence: bulk list-help: list-post: List-Id: internals.lists.php.net Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.600.62\)) Subject: Re: [PHP-DEV] [Discussion] Implicitly backed enums In-Reply-To: Date: Thu, 23 May 2024 13:34:28 -0500 Cc: PHP Internals Content-Transfer-Encoding: quoted-printable Message-ID: References: <99c30f5d-e2f3-4027-a8fc-b3b9c71fb6d1@scriptfusion.com> <1286eed1-c35e-40ec-a6f0-84926c99c911@app.fastmail.com> <3cac0454-ceb2-449a-8b9a-1fac3f866a9c@scriptfusion.com> <8D146901-ADF1-4BAA-B6AA-2CCCFE7A0158@trowski.com> To: =?utf-8?Q?Tim_D=C3=BCsterhus?= X-Mailer: Apple Mail (2.3774.600.62) From: aaron@trowski.com (Aaron Piotrowski) > On May 23, 2024, at 1:20=E2=80=AFPM, Tim D=C3=BCsterhus = wrote: >=20 > Hi >=20 > On 5/22/24 02:48, Aaron Piotrowski wrote: >> Perhaps not as clean and easy as the functionality being built-in, = but it gets the job done. >=20 > I would suggest to use the built-in functionality then. >=20 > enum cases are literally just class constants, thus you can access = them via the `constant()` function or the dynamic class constant fetch = syntax for PHP 8.3+ and check their existence with `defined()`: >=20 > https://3v4l.org/44goe >=20 > =20 > enum ExampleEnum > { > case ONE; > case TWO; > case THREE; > } >=20 > $caseName =3D 'ONE'; > var_dump(defined(ExampleEnum::class . "::{$caseName}")); > var_dump(constant(ExampleEnum::class . "::{$caseName}")); > var_dump(ExampleEnum::{$caseName}); >=20 > Outputs: >=20 > bool(true) > enum(ExampleEnum::ONE) > enum(ExampleEnum::ONE) >=20 > Best regards > Tim D=C3=BCsterhus Hey Tim, This solution is flawed. Not every constant is necessary an enum case. = It also isn't type-safe or as nice to read as tryFrom() and from() = static methods. Cheers, Aaron Piotrowski=