Enum Mapping
Enum mapping provides a powerful and flexible mechanism for handling enums, supporting multiple enum types and conversion scenarios.
Supports enum types with
tryFrom()
andcases()
methodsAutomatically converts strings to enum instances on input
Automatically converts enums to strings (enum name) on output
Provides a flexible and safe mechanism for enum handling
Regular Enum
enum UserRole {
case ADMIN;
case EDITOR;
case VIEWER;
}
class ComplexUser extends Serialize {
public UserRole $role;
// Supports multiple enum types
public UserStatus|UserRole $mixedStatus;
}
$complexUser = ComplexUser::from([
'role' => 'ADMIN', // Automatically converts to UserRole::ADMIN
'mixedStatus' => 'ACTIVE' // Can be UserStatus or UserRole
]);
echo $complexUser->role; // Returns UserRole enum instance
$complexUserArray = $complexUser->toArray();
// Content of $complexUserArray:
// [
// 'role' => 'ADMIN',
// 'mixedStatus' => 'ACTIVE'
// ]
Backed Enum
use Astral\Serialize\Serialize;
// BackedEnum
enum UserStatus: string {
case ACTIVE = 'active';
case INACTIVE = 'inactive';
case SUSPENDED = 'suspended';
}
// Define a user class with enums
class User extends Serialize {
public string $name;
// Supports UnitEnum and BackedEnum
public UserStatus $status;
// Supports multiple enum types
public UserStatus|string $alternateStatus;
}
// Create user object
$user = User::from([
'name' => 'Job',
'status' => 'active', // Automatically converts to UserStatus::ACTIVE
'alternateStatus' => 'inactive' // Supports string or enum value
]);
var_dump($user->status); // Output: UserStatus::ACTIVE
// Convert to array
$userArray = $user->toArray();
// Content of $userArray:
// [
// 'name' => 'Job',
// 'status' => 'ACTIVE', // Output enum name
// 'alternateStatus' => 'INACTIVE'
// ]
最后更新于