> Le 19 mars 2021 à 12:22, Nikita Popov <nikita....@gmail.com > <mailto:nikita....@gmail.com>> a écrit : > > I've updated the RFC (and implementation) to evaluate class constants and > static properties at time of class declaration. As such, everything should > have a well-defined evaluation order now. > > However, this also means that this RFC now also contains a > backwards-compatibility break: Anything used inside class constant / static > property initializers needs to actually be available at the time the class > is declared. You can't first declare the class, then declare some > additional constants it uses, and then use it. >
I don’t like having the static property initialisers and constants evaluated eagerly. I typically declare the main class followed by zero or more class helpers in the same file: with the proposed semantics, I may be forced to occasionally reorder my code. One particular case I have in mind is the following refactoring that I may perform with the advent of enums: ```php class Foo { const STATE_OPEN = 1; const STATE_CLOSE = 2; function setState(int $state) { // .... } } ``` into: ```php class Foo { #[\Deprecated] const STATE_OPEN = FooState::OPEN; #[\Deprecated] const STATE_CLOSE = FooState::CLOSE; function setState(FooState $state) { // .... } } enum FooState { case OPEN; case CLOSE; } ``` —Claude