PHP code example of fab2s / enumerate

1. Go to this page and download the library: Download fab2s/enumerate library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

fab2s / enumerate example snippets


// Safely instantiate from any input type
$status = Status::tryFromAny($request->get('status')); // string, int, null, or enum instance

// Get a serializable value from any enum
$value = $status->toValue(); // Works for Unit, String, and Int backed enums

// Compare across enum boundaries
$status->compares(LegacyStatus::Active); // true if values match

use fab2s\Enumerate\EnumerateTrait;
use fab2s\Enumerate\EnumerateInterface;

enum Status: string implements EnumerateInterface
{
    use EnumerateTrait;

    case Pending = 'pending';
    case Active  = 'active';
    case Closed  = 'closed';
}

// From HTTP request (could be string, int, or null)
$status = Status::tryFromAny($request->input('status'));

// From database or JSON
$status = Status::fromAny($row['status']); // throws if invalid

// To database or JSON
$value = $status->toValue(); // 'active'
json_encode($status);        // '"active"'

// Validation
$status->equals('active', 'pending'); // true if matches any

enum Priority: int implements EnumerateInterface
{
    use EnumerateTrait;

    case Low    = 1;
    case Medium = 2;
    case High   = 3;
}

// All return Priority::Medium
Priority::tryFromAny(2);
Priority::tryFromAny(Priority::Medium);

// All return null (no exception)
Priority::tryFromAny('2');     // string on int-backed
Priority::tryFromAny(null);
Priority::tryFromAny('invalid');

enum LegacyRole: string {
    case Admin = 'admin';
    case User  = 'user';
}

enum Role: string implements EnumerateInterface
{
    use EnumerateTrait;

    case Admin     = 'admin';
    case User      = 'user';
    case Moderator = 'moderator';
}

// Strict mode (default): only accepts same enum type
Role::tryFromAny(LegacyRole::Admin);              // null
Role::tryFromAny(LegacyRole::Admin, strict: true); // null

// Non-strict mode: matches by value across enums
Role::tryFromAny(LegacyRole::Admin, strict: false); // Role::Admin

enum Color implements EnumerateInterface
{
    use EnumerateTrait;

    case Red;
    case Green;
    case Blue;
}

Color::tryFromAny('Red');   // Color::Red
Color::tryFromName('Red');  // Color::Red
Color::Red->toValue();      // 'Red' (case name as string)
json_encode(Color::Red);    // '"Red"'

enum Status: string implements EnumerateInterface
{
    use EnumerateTrait;

    case Draft     = 'draft';
    case Published = 'published';
    case Archived  = 'archived';
}

$status = Status::Published;

// equals: strict comparison, multiple values allowed
$status->equals('published');                    // true
$status->equals('draft', 'published');           // true (matches any)
$status->equals(Status::Published);              // true

// compares: allows cross-enum matching by value
$status->compares(OtherEnum::Published);         // true if values match

use fab2s\Enumerate\Enumerate;

// Works with any enum, even without the trait
Enumerate::tryFromAny(SomeEnum::class, $value);
Enumerate::toValue(SomeEnum::Case);
Enumerate::equals(SomeEnum::Case, 'value');
Enumerate::getType(SomeEnum::class); // 'string', 'int', or null

class UpdateOrderRequest extends FormRequest
{
    public function validated(): array
    {
        return [
            'status'   => OrderStatus::fromAny($this->input('status')),
            'priority' => Priority::tryFromAny($this->input('priority')) ?? Priority::Medium,
        ];
    }
}

class Order extends Model
{
    protected $casts = [
        'status' => OrderStatus::class,
    ];

    public function scopeActive($query)
    {
        return $query->whereIn('status', [
            OrderStatus::Pending->toValue(),
            OrderStatus::Processing->toValue(),
        ]);
    }
}

return response()->json([
    'status' => $order->status, // Automatically serialized via JsonSerializable
]);