> On Jun 20, 2024, at 9:01 AM, Erick de Azevedo Lima <ericklima.c...@gmail.com> 
> wrot
> Mike again:
> 
> > Consider that some uses for a static function need to always occur no matter
> > whether or not any other method of the class is called. My previous email 
> > [1] covered several.
> > Here [2] is a discussion on StackOverflow of "hooks" that should be eagerly 
> > loaded.
> Yes, I considered this approach before. But then I realized that for covering 
> the properties initialization, 
> this already existing lazy loading mechanism would suffice. At the end of the 
> RFC,
> I consider future scope to create an early-init. In my opinion, as it covers 
> a more general use for this init,
> it should be implemented maybe using another magic method, like "__load" or 
> "__link",
> which would be hooks on class loading process and not specific to static 
> variables initialization

Well, that sure is depressing to hear.  

Looking back on all my uses for static methods, my primary use-case when 
building WordPress websites was to wire up hooks thus what excited me most 
about the prospect of getting "static constructors" in PHP was for wiring up 
said hooks.

I get the lack of desire to support a lazy keyword, especially giving the lazy 
loading thread happening on the list, and I agree that lazy loading is better 
for the use-cases that motivated you, but it is depressing because the 
likelihood of someone else after so many years would have the passion and 
motivation to propose a `__load` method AND to have the skills to implement it 
is slim-to-none IMO.

So IOW, a `__load` method it's almost certainly never going to happen. Such is 
life I guess.

Well at least let me submit a parting bikeshed on the name. Rather than any 
form of "construct" can you at least name it `__init` or `__initialize`?  It is 
not construction, and even in your comment where you wrote unprompted "...not 
specific to static variables initialization" you christened it to be 
"initialization."

P.S. I do think lazy-loading without an explicit keyword will be 
counter-intuitive to many, and will result in many a StackOverflow question 
asking "Why are my `__staticConstruct` (or `__init` as proposed) methods not 
being called?!?"  So if it were me I would implement them w/o default lazy 
loading so there would be motivation in the future to address it another way.  

That, or go ahead and also propose a `__load` method as part of this RFC.

> On Jun 20, 2024, at 4:57 AM, Lynn <kja...@gmail.com> wrote:
> 
> Seeing an extra keyword made me think of:
> ```php
> class Foo
> {
>     public constructor __construct() {}
>     public destructor __destruct() {}
>     public static constructor __construct() {}
>     public static destructor __destruct() {} // probably doesn't make sense 
> right now
> }
> ``` 
> This syntax would allow named constructors in the future, or even omitting 
> the default name.
> ```php
> class Foo
> {
>     public constructor() {}
>     public destructor() {}
> 
>     public constructor create(int $id)
>     {
>         $this->id = $id; // no need to call the default __construct, nor 
> needs to return
>     }
> }
> ```
> Not sure if this is even a desired path to take, just wanted to throw the 
> idea out there.

I do like the constructor/destructor vs. function naming, but as I wrote above 
I think "__init" — and for your approach Lynn: "initializer" — would be more 
applicable for static classes methods, with or without an explicit prefixed 
static keyword. 

#fwiw

-Mike

Reply via email to