Repository navigation
Open
Labels
breaking changeIntroduces or coordinates a breaking changeIntroduces or coordinates a breaking changerefactoringtech debtTechnical debt reductionTechnical debt reduction
Milestone
Description
Summary
Convert the remaining classes in the Enums folders to PHP enums in 3.2.0, once PHP 8.2 is the minimum: the adapter types, StatusCode, ContentType, Env and ExitCode. The first batch, the classes that can convert on PHP 8.1, is #612.
Why 3.2.0
These classes appear in class constants, property defaults or parameter defaults, mostly as the keys of maps, and PHP 8.1 does not allow Case->value in a constant expression. PHP 8.2 does (the RFC "Fetch properties of enums in const expressions"). I checked it on PHP 8.2.35 and 8.1.34:
public const ADAPTERS = [LoggerType::SINGLE->value => SingleAdapter::class, ...]loads and works on 8.2.- The same code fails on 8.1 with
Fatal error: Constant expression contains invalid operations, and so does the realLoggerFactory.phpwith its keys written that way.
With 8.2 the maps keep their shape. In each place only ->value is added to the keys.
Classes in this ticket
- Adapter types (15):
AppType,ArchiveType,AuthType,CacheType,CaptchaType,CryptorType,DatabaseType,FileSystemType,LangType,LoggerType,MailerType,PaginatorType,RateLimitType,RendererType,SessionType. - Others:
ContentType,Env,ExitCode,StatusCode(62 integer cases).
Places that need ->value
- the 15
ADAPTERSconstants in the factories andDatabase PaginatorFactory::REQUIRED_PARAMS- the
Statustrait's$textsmap, with the status codes as keys - the property and parameter defaults that hold these classes
What to watch
- An enum case is not its value:
StatusCode::OK === 200is false, and anintparameter rejects a case. Comparisons, array keys and parameters that use the value need->value, and text from config or.envneeds::from()or::tryFrom(). - Apps and templates use these constants, for example
AppFactory::create(AppType::WEB, ...)in the starter project andPaginatorTypein the Toolkit templates. Signatures typedstring $typechange.
Out of scope
ExceptionMessages, whose classes extend a shared base class.- The classes in Convert the first batch of Enums classes to PHP enums #612.
Breaking changes
- Public constants become enum cases, and the type of some public parameters and return values changes. To be listed in the changelog and in the upgrade guide.
Acceptance criteria
- every class above is converted or has a recorded reason to stay a constants class
- the starter project and the module templates still work, and the docs examples use the new form
composer test,composer cs:check,composer phpstanandcomposer rector:checkpass on every PHP version in the CI matrix- the changelog lists every converted class
Metadata
Metadata
Assignees
Labels
breaking changeIntroduces or coordinates a breaking changeIntroduces or coordinates a breaking changerefactoringtech debtTechnical debt reductionTechnical debt reduction
Activity