> On Sep 13, 2021, at 12:26 PM, Rowan Tommins <rowan.coll...@gmail.com> wrote: > >> 2.) Make the initialization function private. > > I'm not sure how that would work: a private constructor means that it has to > be explicitly called from within the same class, but a static initialiser > would be called by the engine, before the class scope even existed.
I think we are getting in the weeds here and loosing sight of the desired outcome. Currently it is not possible for a developer to disallow calling a class initialization method from outside of the class. However that would end up being achieved — via private methods, protected methods, or even voodoo — those details are unimportant to ultimately disallowing the calling of initialization code from outside the class. > From your link, it seems that C# restricts them much more than methods or > constructors: >> >> A static constructor doesn't take access modifiers or have parameters. >> A class or struct can only have one static constructor. >> Static constructors cannot be inherited or overloaded. >> A static constructor cannot be called directly and is only meant >> to be called by the common language runtime (CLR). It is invoked >> automatically. Those all sound like they would be appropriate restrictions for PHP too. > Apparently, the JS implementation does allow multiple static initialiser > blocks in one class, which are simply processed in order. But JS classes are > weird creations, implemented as a complex sugar on top of a classless object > system, so may not be the best point of reference for PHP, whose object > system much more closely resembles Java or C#. I did not reference JS — I only referenced Java and C# — so JS' approach was not part of my argument. -Mike -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php