laravel-proxy-manager-将Ocramius/ProxyManager集成到Laravel应用程序中。功能快速创建不同类型的代理实例。快速绑定不同类型的代理实例到容器。将不同类型的代理实例快速扩展到容器。安装$composerrequireguanguans/laravel-proxy-manager-vvv$phpartisanvendor:publish--provider="Guanguans\\LaravelProxyManager\\ProxyManagerServiceProvider"使用获取代理管理器实例app(\Guanguans\LaravelProxyManager\ProxyManager::class);resolve(\Guanguans\LaravelProxyManager\ProxyManager::class);代理管理器接口方法bar=$bar;睡觉(3);}publicfunctiongetBar():string{return$this->bar;}}//ProxyManager::bindLazyLoadingValueHolderProxy(Foo::class);ProxyManager::singletonLazyLoadingValueHolderProxy(Foo::class);$formatter=newResourceUsageFormatter();$timer=newTimer();$timer->start();$timer->start();//代理类初始化时不会调用原类的构造函数dump($foo=app(Foo::class),$formatter->resourceUsage($timer->stop()));//只有在实际调用时才会调用调用原类的构造函数dump($foo->getBar(),$formatter->resourceUsage($timer->stop()));ProxyManagerGeneratedProxy\__PM__\App\Foo\Generated5320f6306ba550844e07c949e4af382d-App\Foo@proxy{#774-valueHolder1cdad:null-initializer7920c:Closure(?object&$wrappedObject,?object$proxy,string$method,array$parameters,?Closure&$initializer复制代码){#758class:"Guangans\LaravelProxyManager\ProxyManager"这个:Guangans\LaravelProxyManager\Proxy经理{#755…}使用:{$className:"App\Foo"$classArgs:[]}文件:"/Users/yaozm/Documents/develop/laravel-proxy-manager/src/ProxyManager.php"line:"282to287"}}"Time:00:00.008,Memory:20.00MB""bar""Time:00:03.025,Memory:22.00MB"扩展为访问截取器代理示例(切面)ProxyManager::extendToAccessInterceptorValueLogHolder(Holder::class,['error'=>staticfunction(object$proxy,LogManager$realInstance,string$method,array$parameters,bool&$returnEarly){dump('在执行错误日志方法之前。');}],['error'=>staticfunction(object$proxy,LogManager$realInstance,string$method,array$parameters,&$returnValue,bool&$overrideReturnValue){dump('执行错误日志方法后。');}]);dump($logger=app(LogManager::class));$logger->error('发生了什么?');ProxyManagerGeneratedProxy\__PM__\Illuminate\Log\LogManager\Generated9b66c8f3bc457c2c26acc55874d391b3-Illuminate\Log\LogManager@proxy{#298▼-valueHolder8f21a:Illuminate\Log\LogManager{#168▼#app:Illuminate\Foundation\Application{#6?}#channels:[]#customCreators:array:1[?]#dateFormat:"Y-m-dH:i:s"#levels:array:8[?]}-methodPrefixInterceptors8d709:array:1[▼"error"=>Closure(object$proxy,LogManager$realInstance,string$method,array$parameters,bool&$returnEarly){#280?}]-methodSuffixInterceptors2a12b:array:1[▼"error"=>Closure(object$proxy,LogManager$realInstance,string$method,array$parameters,&$returnValue,bool&$overrideReturnValue){#278?}]}"在执行错误日志方法之前。""执行错误日志方法后。------------------+------------------------------------------+--------------------------------+|索引|原始类|代理类|代理类型|+--------+------------------------+------------------------------------------+--------------------------------+|1|App\Foo|Generated5320f6306ba550844e07c949e4af382d|虚拟代理||2|Illuminate\Log\LogManager|Generated9b66c8f3bc457c2c26acc55874d391b3|访问拦截器值持有人|+--------+----------------------------+------------------------------------------+------------------------------+参考链接https://github.com/Ocramius/ProxyManagerhttps://www.sitepoint.com/restful-remote-object-proxies-with-proxymanager/原文链接https://github.com/guanguans/guanguans.github.io/issues/48
