[PHP-DEV] RFC Karma request: Enums with Associated Values for cases

Hello,

I would like to get RFC Karma for my wiki account. My username is: jkroon.
The proposed RFC will introduce Enums with Associated Values for cases and is inspired by Rust and Swift.

For example it would allow for the following:

<?php

enum ApiResult {
case Success(string $data, int $statusCode);
case Failure(Throwable $error, ?int $statusCode);
}

function handle(ApiResult $r): string {
return match ($r) {
ApiResult::Success => 'OK ' . $r->statusCode . PHP_EOL,
ApiResult::Failure => 'NO ' . ($r->statusCode ?? 'unknown') . PHP_EOL,
};
}

echo handle(ApiResult::Success('All good', 200));
echo handle(ApiResult::Failure(new Exception('Bad request'), 400));
echo handle(ApiResult::Failure(new Exception('Server error'), null));

Regards,
Jordi

On Wed, Feb 4, 2026, at 6:16 AM, Jordi Kroon wrote:

Hello,

I would like to get RFC Karma for my wiki account. My username is:
jkroon.
The proposed RFC will introduce Enums with Associated Values for cases
and is inspired by Rust and Swift.

For example it would allow for the following:

<?php

enum ApiResult {
    case Success(string $data, int $statusCode);
    case Failure(Throwable $error, ?int $statusCode);
}

function handle(ApiResult $r): string {
    return match ($r) {
        ApiResult::Success => 'OK ' . $r->statusCode . PHP_EOL,
        ApiResult::Failure => 'NO ' . ($r->statusCode ?? 'unknown') . PHP_EOL,
    };
}

echo handle(ApiResult::Success('All good', 200));
echo handle(ApiResult::Failure(new Exception('Bad request'), 400));
echo handle(ApiResult::Failure(new Exception('Server error'), null));

Regards,
Jordi

Please be aware that there are already plans for this feature (RFC is a bit dated for now so don't take literally):

Which is currently blocked pending pattern matching, currently in discussion:

I'm regularly around the phpc.chat Discord if you want to talk about it more directly. Right now the main blocker is time availability, and getting pattern matching done. (See it's thread for the currently open questions.)

--Larry Garfield