Instantiation
Enhanced methods for creating enum instances from values and names.
Overview
Section titled “Overview”The From trait adds:
from()andtryFrom()methods to pure enumsfromName()andtryFromName()methods to all enums
Note: BackedEnum instances already have
from()andtryFrom()methods which won’t be overridden.
use Cline\Enums\Concerns\From;
enum TaskStatus: int{ use From;
case Incomplete = 0; case Completed = 1; case Canceled = 2;}
enum Role{ use From;
case Administrator; case Subscriber; case Guest;}Pure Enums
Section titled “Pure Enums”For pure enums, from() and tryFrom() work with case names:
from()
Section titled “from()”Throws ValueError if the case doesn’t exist:
Role::from('Administrator'); // Role::AdministratorRole::from('Nobody'); // Error: ValueErrortryFrom()
Section titled “tryFrom()”Returns null if the case doesn’t exist:
Role::tryFrom('Guest'); // Role::GuestRole::tryFrom('Never'); // nullAll Enums
Section titled “All Enums”Both backed and pure enums can use name-based instantiation:
fromName()
Section titled “fromName()”Throws ValueError if the case doesn’t exist:
// Backed enumTaskStatus::fromName('Incomplete'); // TaskStatus::IncompleteTaskStatus::fromName('Missing'); // Error: ValueError
// Pure enumRole::fromName('Subscriber'); // Role::SubscriberRole::fromName('Hacker'); // Error: ValueErrortryFromName()
Section titled “tryFromName()”Returns null if the case doesn’t exist:
// Backed enumTaskStatus::tryFromName('Completed'); // TaskStatus::CompletedTaskStatus::tryFromName('Nothing'); // null
// Pure enumRole::tryFromName('Guest'); // Role::GuestRole::tryFromName('Tester'); // nullUse Cases
Section titled “Use Cases”Safe Instantiation
Section titled “Safe Instantiation”When dealing with user input or external data:
$status = TaskStatus::tryFromName($request->get('status'));
if ($status === null) { return response()->json(['error' => 'Invalid status'], 400);}Flexible APIs
Section titled “Flexible APIs”Accept both values and names:
public function setStatus(int|string $status): void{ $this->status = is_int($status) ? TaskStatus::from($status) : TaskStatus::fromName($status);}Migration Support
Section titled “Migration Support”When transitioning from string constants to enums:
// Old code used stringsconst STATUS_INCOMPLETE = 'Incomplete';
// New code can still instantiate from those strings$status = TaskStatus::fromName(self::STATUS_INCOMPLETE);Dynamic Case Resolution
Section titled “Dynamic Case Resolution”$caseNames = ['Administrator', 'Subscriber', 'Guest'];
$roles = array_map( fn($name) => Role::fromName($name), $caseNames);