核心容器类的使用
参考资料
- 借鉴laravel打造一套微服务化框架
容器的绑定方式:
- instance($abstract, $instance):直接绑定实例化好的value
- bind($abstract, $concrete, $shared):绑定可以实例化的匿名函数
- singleton:单例绑定可以实例化的匿名函数,等价于bind($abstract, $concrete, true)
- bindIf:在bind前判断是否绑定过,避免重复绑定
容器事件:
- $app->resolving(闭包),解析任何对象都会调用
- $app->resolving(XXX::class, 闭包),解析XXX时调用
- $app->afterResolving(闭包),解析完任何对象都会调用
- $app->afterResolving(XXX::class, 闭包),解析完XXX时调用
容器call方法
- $app->call('simpleFunction'),直接调用方法名
- $app->call("TestClass@func"),先实例化类,再调用类方法
- $app->call($instance),调用实例,默认调用__invoke方法
- $app->call([$instance, "func"]),调用实例的方法
- $app->call([$instance, "staticFunc"]),调用实例的静态方法
- $app->call(["TestClass", "staticFunc"]),调用类的静态方法
- $app->call("TestClass::staticFunc"),调用类的静态方法
容器上下文绑定:
- $app->when(PhotoController::class)->needs(Filesystem::class)->give(LocalFilesystem::class)
- $app->when(PhotoController::class)->needs(Filesystem::class)->give("s3")