When you assign a scalar value to an enum
case
in PHP, it is called a Backed Case (because the case
is "backed" by a simpler value), and an enum
that contains all backed cases is called a "Backed Enum".
When using backed enums, you must adhere to the following rules:
- All cases can only be of a single type at a time;
- Cases do not have auto-generated scalar equivalents (such as a sequence of numbers), therefore, all cases must have a unique scalar value defined explicitly.
Consider, for example, the following where enum
cases are assigned string
values:
// PHP 8.1+ enum MyEnum: string { case Foo = 'foo'; case Bar = 'bar'; case Baz = 'baz'; }
Backed enums are the opposite of Pure Enums (which only have cases that are singleton objects without any scalar equivalents).
Backed enums have:
- Cases that have a read-only
name
property that returns the case-sensitive name of the respectivecase
; - Cases that have a read-only
value
property that returns the value of the respectivecase
; - A static
cases()
method that returns an array of all defined cases.
For example:
// PHP 8.1+ // ... $cases = MyEnum::cases(); var_dump($cases); // [enum(MyEnum::Foo), enum(MyEnum::Bar), enum(MyEnum::Baz)] echo $cases[0]->name; // 'Foo' echo $cases[0]->value; // 'foo' echo MyEnum::Foo->name; // 'Foo' echo MyEnum::Foo->value; // 'foo'
This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.