golossus / php-lazy-proxy-loading
提供一种代理类工厂,以懒加载和无缝方式加载服务
v1.0.2
2021-01-19 11:10 UTC
Requires
- php: >=7.1
Requires (Dev)
- phpunit/phpunit: >=7.5
README
php-lazy-proxy-loading是一个通过使用懒加载策略简化PHP类(或服务)加载过程的包。这对于依赖注入容器(负责构建许多应用程序的服务)特别有用。
此包通过提供代理类工厂来实现,它可以创建任何PHP类或服务的代理类。只有在实际需要时,即在其公共方法的第一次调用时,才会构建实际的服务。
鉴于当前Laravel框架中尚无内置的服务懒加载策略,将此库与Laravel框架结合使用特别有趣。我们开始这个库是为了解决使用Laravel时遇到的依赖注入问题,这些问题可以通过懒加载某些服务轻松解决。
安装
composer require golossus/php-lazy-proxy-loading
使用
基本使用示例
use Golossus\LazyProxyLoading\ProxyClassFactory; ... $myClassProxy = ProxyClassFactory::create(\MyClass::class, function () { return new \MyClass(/* dependencies */); });
在上面的示例中,$myClassProxy
扩展了MyClass
类型,它作为适配器以底层服务的行为出现,因此它可以无缝地作为真实服务注入。最终的服务将在我们通过使用ProxyClassFactory::create
方法的第二个参数传递的回调函数调用其任何公共方法时构建。
echo $myProxyClass->myClassPrublicMethod(); // MyClass service is created at this point echo $myProxyClass->myClassPrublicMethod(); // MyClass service is already created at this point, so it's not re-built
Laravel
对于Laravel框架,此包提供了一个特殊的trait,以无缝地使用代理工厂与其依赖注入容器。您可以在任何Laravel服务提供者中使用此trait,并将任何服务定义为lazy
。
.. use Illuminate\Support\ServiceProvider; use Golossus\LazyProxyLoading\LazyLoadingTrait; .. class MainProvider extends ServiceProvider { use LazyLoadingTrait; public function register() { // common laravel service registration, not lazy $this->app->singleton(CustomMailingService::class, function () { $mailer = $this->app->make(Mailer::class); return new CustomMailingService($mailer); } ); // or same service registration but lazy loaded $this->app->singleton(...$this->lazy(CustomMailingService::class, function () { $mailer = $this->app->make(Mailer::class); return new CustomMailingService($mailer); } )); } }
社区
贡献
这是一个开源项目。Golossus团队希望使其成为社区驱动的,并开放给贡献者。请参阅贡献文档。
安全问题
如果您发现安全漏洞,请按照我们的披露程序操作。