> 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

Reply via email to