应用示例
- $container = new Container('../');//假设这是路径
- $echoT = $container->get(\Test\EchoT::class); //假设echoT类的定名空间是\Test
- $echoT->echo();
- // 检查类是否可实例化, 清除抽象类abstract和对象接口interface
- if (!$reflector->isInstantiable()) {
- throw new \Exception("Can't instantiate ".$className);
因为接口T是无法实例化的,所以,一般在法度榜样内,我们都加上别号(参照laravel框架)
- $container->alisa(\Test\T::class,\Test\T\A::class); //指假寓口T应用类A(控制反转)
针对接口
下面是alias办法
- public function alias(string $key, $class, bool $singleton = true)
- {
- if($singleton) {
- $this->singleton[] = $class;
- }
- $this->aliases[$key] = $class;
- return $this;
- }
- //同时,我们须要在build的时刻进行断定是否为别号
- public function build($className)
- {
- if(is_string($className) and $this->has($className)) {
- return $this->get($className);
- }
- if(isset($this->aliases[$className])) {
- if(is_object($this->aliases[$className])) {
- return $this->aliases[$className];
- }
- $className = $this->aliases[$className];
推荐阅读
【51CTO晃荡】8.26 带你深度懂得清华大年夜学、搜狗基于算法的IT运维实践与摸索 本指南将向你介绍若何应用 Authconfig 在敕令行中将无图形界面的 CentOS 7 办事器集成到 Samba4 AD 域控制>>>详细阅读
本文标题:PHP如何实现依赖注入
地址:http://www.17bianji.com/lsqh/36755.html
1/2 1