Hey David, On Sun, 12 Sep 2021, 01:28 David Rodrigues, <david.pro...@gmail.com> wrote:
> Hello! > > I would like to suggest a feature I saw being implemented in the V8 9.4 > engine called "*class static initialization block*". > > https://v8.dev/blog/v8-release-94 > > In short, it is a method that is executed once when a class is imported and > loaded, allowing for some more advanced initialization process to be done. > > class Test { > static readonly Carbon $now; > > static () { > self::$now = now(); > } > } > > Currently I can only do this in a very hacky way, usually by creating a > public static method and calling it after class initialization. > > class Test { > static Carbon $now; > > public static function init(): void { > self::$now = now(); > } > } > > Test::init(); > > I think the way the V8 does is much more interesting. > > Another alternative would be to create a magic method like __initialize(). > This already works without any magic. In `MyClass.php`: ```php class MyClass { public static DateTimeImmutable $startup; public function horribleInitializationPractices() { self::$startup = new DateTimeImmutable(); } } MyClass::horribleInitializationPractices(); ``` That's really all there is to it. What you define as hacky is really normal/boring, and does not need special constructs. Also, it's generally not a good idea to sprinkle static mutable runtime-bound all over the place: it should be an exception, not a rule. >