PHP/enum: Difference between revisions
from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
No edit summary |
No edit summary |
||
| Line 41: | Line 41: | ||
|} | |} | ||
==Caveats== | ==Caveats== | ||
There is no <code>is_enum()</code> function. | |||
<code>Enum</code>s are similar to objects in that: | <code>Enum</code>s are similar to objects in that: | ||
* An <code>enum</code> case will pass the [https://www.php.net/manual/en/function.is-object.php <code>is_object()</code>] test. (I think.) | * An <code>enum</code> case will pass the [https://www.php.net/manual/en/function.is-object.php <code>is_object()</code>] test. (I think.) | ||
Latest revision as of 12:31, 15 March 2026
Examples
| "Basic" enum | "Backed" enum |
|---|---|
enum Suit
{
case Hearts;
case Diamonds;
case Clubs;
case Spades;
}
|
enum Suit: string
{
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
}
|
Methods
| kind of thing | name & args | returns | defined in | description |
|---|---|---|---|---|
| static function | cases() |
array | Template:L/php/native | returns a packed array of all defined cases, in order of declaration |
| static function | tryFrom(int|string $value) |
?static | Template:L/php/native | same as from(), but returns NULL if not found (instead of erroring)
|
| static function | from(int|string $value) |
static | Template:L/php/native | same as tryFrom, but throws an error if not found
|
| dynamic property | $name | string | Template:L/php/native | the name of the case (case-sensitive) |
| dynamic property | $value | int or string | Template:L/php/native | the value of the case |
Caveats
There is no is_enum() function.
Enums are similar to objects in that:
- An
enumcase will pass theis_object()test. (I think.) - They may implement interfaces.
- Code in their methods may use
self::and$this->. - The
::classmagic constant works.
Enums are different from objects in that:
- They cannot be extended, or extend other entities.
- They can't have constructors or destructors.
- They can't have static properties.
- The
::classmagic constant exists on individual cases (enum instances) as well. - An
enumcan't be instantiated like an object; individual cases are similar to singleton objects.- Cases also provide the
::classmagic constant. (I don't think this works on regular objects.)
- Cases also provide the
Not sure if enum cases can be used as switch cases (to be checked).
Documentation
Note that enums can be cast directly to arrays.
- Enumerations:
- Demiclasses:
3rd party
Sample Code
To get a UnitEnum enum from a case name (equivalent to from()/tryFrom()):
- constant("Template:Arg::{$value}")
Tests
- is an
enumcase an object (is_object)? [YES] - is an
enumseen asis_a UnitEnum? [YES] - is an
enumaninstanceof UnitEnum? [YES] - is an
enumaninstanceof enum? [no]
