laminas-servicemanager icon indicating copy to clipboard operation
laminas-servicemanager copied to clipboard

Lazy services should not have their desctructor proxied

Open func0der opened this issue 11 months ago • 4 comments

Feature Request

When you proxy a class that has a destructor in it, the proxy manager by default creates a proxy for the __destruct method. Then without actually needing or using the class the destructor is called at the end of execution which loads the lazy loaded class.

There is a possibility to configure this behavior in the proxy manager by passing $proxyOptions['skipDestructor'], but there is currently no way to pass any proxy options to the proxy creation process from the service manager config.

There could be basically two routes here:

  • Either do not add the destructor by default
    • this could potentially break some code
    • Kinda makes sense since we are not calling the class actively and therefore should not need a destructor
      • Putting it like this also could make this a proxy manager feature: adding destructor dynamically or better only calling it when the class is actually initialized
  • Add the possibility to define $proxyOptions for each lazy services registered
Q A
New Feature yes
RFC yes
BC Break yes&no

Summary

Have destructor of lazy services dealt with in a way that does not call them without the class being ever used in that run of PHP.

func0der avatar Aug 05 '23 01:08 func0der