Re: [RFC] Lazy Objects

From: Date: Wed, 24 Jul 2024 14:14:45 +0000
Subject: Re: [RFC] Lazy Objects
References: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message


On Wed, Jul 24, 2024, at 16:13, Rob Landers wrote:
> On Wed, Jul 24, 2024, at 16:02, Larry Garfield wrote:
>> On Thu, Jul 18, 2024, at 7:12 AM, Nicolas Grekas wrote:
>> 
>> >> Otherwise, I'm quite looking forward to this.
>> >
>> > 🤞
>> 
>> Another thought that occurred to me.  Given how lightweight it *looks* to be (may not
>> actually be, but looks it), how much overhead would there be to having a compiled DI container that
>> is lazy by default?  Just make everything lazy with a fairly standard initializer or factory, unless
>> a specific case says you shouldn't.  That way you can use optional dependencies in a
>> constructor pretty much at will with no overhead of needing to create a chain of dependencies as a
>> result.
>> 
>> Would that be a bad idea for some reason, or would it actually work?
>> 
>> (This doesn't really affect my vote, more just a thought that came up..)
>> 
>> --Larry Garfield
>> 
> 
> I'm not convinced a DI container is possible at all with this implementation, see
> "surprising behaviors."
> 
> When you are building a DI container, you usually have *absolutely no idea* what a user will
> return from a proxy. At most, you might know they are returning SomeInterface or SomeBaseClass, but
> the user might return MyFancyClass that implements the interface or base class, which isn't
> allowed via this implementation. The type must be exactly the same or a parent class:
> 
>> the factory of a lazy proxy is allowed to return an instance of the same class as the
>> proxy, or of a parent class.
>> 
>> Returning an instance of a sub-class is not allowed
> 
> — Rob

Sorry, misspoke:

> what a user will return from a proxy.

should be "what a user will return from a factory."

— Rob


Thread (95 messages)

« previous php.internals (#124574) next »