Content · Programming · PHP

PHP ReflectionEnum::getCases() Method: Usage and Examples

Retrieves reflection objects for all declared enum cases.

1 views Published Oct 17, 2026 Updated Oct 17, 2026 Know-Stuff

When building tools that inspect PHP code, ReflectionEnum::getCases() helps answer a focused question: retrieves reflection objects for all declared enum cases.

Reflection is useful in framework tooling, dependency injection, testing, code inspection and debugging.

What Is ReflectionEnum::getCases()?


Retrieves reflection objects for all declared enum cases.

Its method signature is:

public function getCases(): array

This method has no required arguments.

Return value: array

Example 1: Inspect a backed enum


Start with a self-contained PHP declaration and inspect the method result.

<?php

declare(strict_types=1);

enum ShippingMethod: string { case Pickup = 'pickup'; case Delivery = 'delivery'; }
enum Progress { case Waiting; case Finished; }

$enumReflection = new ReflectionEnum(ShippingMethod::class);

$result = $enumReflection->getCases();
echo implode(", ", array_map(static fn($enumCase) => $enumCase->getName(), $result));

Output:

Pickup, Delivery

Explanation: Retrieves reflection objects for all declared enum cases.

Example 2: Compare with a pure enum or alternate case


Next, change the reflected declaration or parameter to observe a related situation.

<?php

declare(strict_types=1);

enum ShippingMethod: string { case Pickup = 'pickup'; case Delivery = 'delivery'; }
enum Progress { case Waiting; case Finished; }

$enumReflection = new ReflectionEnum(Progress::class);

$result = $enumReflection->getCases();
echo implode(", ", array_map(static fn($enumCase) => $enumCase->getName(), $result));

// Check the returned value type before using the result.
echo "\nResult type: " . get_debug_type($result);

Output:

Waiting, Finished
Result type: array

Explanation: Cases are returned as objects describing cases, not a list of scalar values.

Practical Example: Use enum metadata in domain code


This final case shows how the same API can be used when inspecting application definitions.

<?php

declare(strict_types=1);

enum ShippingMethod: string { case Pickup = 'pickup'; case Delivery = 'delivery'; }
enum Progress { case Waiting; case Finished; }

$enumReflection = new ReflectionEnum(ShippingMethod::class);

$result = $enumReflection->getCases();
echo implode(", ", array_map(static fn($enumCase) => $enumCase->getName(), $result));

// Use the reflection result in a simple decision.
if (is_bool($result)) {
    echo "\nStatus: " . ($result ? "yes" : "no");
} elseif (is_array($result)) {
    echo "\nEntries: " . count($result);
} elseif ($result === null) {
    echo "\nNo value returned";
} else {
    echo "\nReflection result available";
}

Output:

Pickup, Delivery
Entries: 2

Explanation: UnitEnum::cases returns actual enum case instances.

Important Behavior and Edge Cases


  • Cases are returned as objects describing cases, not a list of scalar values.
  • UnitEnum::cases returns actual enum case instances.
  • Reflection describes declarations and runtime state; requesting metadata does not automatically validate or sanitize application input.

Comparison With Related Approaches


ApproachWhen to Use It
ReflectionEnum::getCases()Retrieves reflection objects for all declared enum cases.
Related APIUnitEnum::cases returns actual enum case instances.

Common Beginner Mistakes


MistakeCorrect Approach
Ignoring this condition: Cases are returned as objects describing cases, not a list of scalar values.Handle the specific limitation: Cases are returned as objects describing cases, not a list of scalar values.
Confusing this method with Related APIUnitEnum::cases returns actual enum case instances.

Key Takeaways


  • Retrieves reflection objects for all declared enum cases.
  • Cases are returned as objects describing cases, not a list of scalar values.
  • UnitEnum::cases returns actual enum case instances.

Use ReflectionEnum::getCases() when you need the precise metadata or behavior demonstrated above. Keep the target declaration and relevant PHP version in mind when adapting the examples.

Share this resourceSend this page to someone who may find it useful.