Skip to main content

API Reference

Enum

Base class for creating PHP 8-style enums.

Static Methods

MethodReturnsDescription
CaseName()ValueGet enum case (case-insensitive)
cases()Value[]Get all enum cases
from($value)ValueGet case by value (throws if not found)
tryFrom($value)Value|nullGet case by value (null if not found)

Example

use PhpCompatible\Enum\Enum;

class Status extends Enum
{
protected $draft;
protected $published = 10;
}

// Access cases
$draft = Status::draft();
$published = Status::published();

// Get all cases
$cases = Status::cases();

// Lookup by value
$case = Status::from(10); // Returns published
$case = Status::tryFrom(999); // Returns null

Value

Represents a single enum case.

Properties

PropertyTypeDescription
$namestringThe enum case name (original definition)
$valueint|string|nullThe enum case value

Example

$case = Status::draft();

echo $case->name; // "draft"
echo $case->value; // 0

EnumLabel

Converts enum case names to human-readable labels.

Static Methods

MethodReturnsDescription
from(Value $value)EnumLabelCreate label from enum value

Instance Methods

MethodReturnsDescription
toString()stringGet label as string
__toString()stringAuto string conversion

Example

use PhpCompatible\Enum\EnumLabel;

class TaskStatus extends Enum
{
protected $pendingReview;
}

$label = EnumLabel::from(TaskStatus::pendingReview());
echo $label; // "Pending Review"
echo $label->toString(); // "Pending Review"

Php8EnumLabel

For PHP 8.1+ native enums (extends EnumLabel).

Static Methods

MethodReturnsDescription
fromEnum(UnitEnum $case)Php8EnumLabelCreate label from PHP 8 enum case

Instance Methods

MethodReturnsDescription
toString()stringGet label as string
__toString()stringAuto string conversion

Example

// PHP 8.1+
use PhpCompatible\Enum\Php8EnumLabel;

enum Status {
case PendingReview;
case InProgress;
}

echo Php8EnumLabel::fromEnum(Status::PendingReview); // "Pending Review"

How It Works

  • Enum cases are defined as protected instance properties
  • Properties are immutable from outside the class
  • __callStatic enables static-style access: Suit::hearts()
  • A singleton instance is created internally for reflection
  • Values are lazily loaded and cached on first access
  • null (uninitialized) values auto-increment from 0
  • Case-insensitive matching allows flexible access styles