Enums were a very useful addition to PHP, however one aspect of them is neither explicitly documented - or seemingly even talked about.
Enums were implemented as final so they cannot be extended nor can extend anything else. >From a user perspective it's surprising - and actually limiting. USAGE EXAMPLE: I am making an error management system: each error presented to the user must have a unique code visible. ```php class SystemError { public function __construct( private string $errorText, private ErrorCode $code ) { } public function __toString(): { return $this->errorText . ' ' . $this->code->toString(); } } // ... enum ErrorCode { case Code_1; case Code_2; public function toString(): string { return 'Error code:' . substr($this->name, strlen('Code_')); } } ``` Now I want to modify it to support different modules with different namespaces for errors, e.g. an ApiError, simple enough: ```php enum BaseErrorCode { // ... } enum ErrorCode extends BaseErrorCode { case Code_1; case Code_2; // ... } enum ApiErrorCode extends BaseErrorCode { // ... function toString(): string { return 'Error code:API-' . substr($this->name, strlen('Code_')); } } ``` This results in a syntax error. PROPOSAL: Enums should be able to extend other enums. For a complete wishlist, add: * abstract enums; * enums allowed to implement interfaces; However since I have no experience in PHP source code, I can only provide the test suite for a possible PR this might have :( Do you think this is likely to get implemented? -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php