php 如何理解依赖注入,如何理解php的依赖注入

本文通过实例详细解释了PHP中的依赖注入概念,传统方式是逐层创建类实例,而依赖注入则是先创建所有依赖,然后将它们注入到需要的类中,实现了控制反转,增强了代码的灵活性和可测试性。依赖注入允许在不修改代码的情况下更换依赖,如将A类中的Memcache替换为Redis。最后提到了依赖注入容器,它负责实例化和管理依赖关系,进一步简化了代码的组织和维护。
摘要由CSDN通过智能技术生成

之前写过关于php依赖注入的文章。。最近发现有的朋友对这个还是理解模糊,在这里我想写个简单的实例帮助朋友们理解下。。。

传统的思路是应用程序用到一个A类,就会创建A类并调用A类的方法,假如这个方法内需要一个B类,就会创建B类并调用B类的方法,而这个方法内需要一个C类,就会创建C类,接着做些其它工作。

classC

{public functiondoSomething()

{echo __METHOD__, ‘我是C类|‘;

}

}classB

{public functiondoSomething()

{$bim = newC();$bim->doSomething();echo __METHOD__, ‘我是B类|‘;

}

}classA

{public functiondoSomething()

{$bar = newB();$bar->doSomething();echo __METHOD__, ‘我是A类|‘;;

}

}$class = newA();$class->doSomething(); //C::doSomething我是C类|B::doSomething我是B类|A::doSomething我是A类|

使用依赖注入的思路是应用程序用到A类,A类需要B类,B类需要C类,那么先创建C类,再创建B类并把C注入,再创建A类,并把B类注入,再调用A方法,A调用B方法,接着做些其它工作。

{public functiondoSomething()

{echo __METHOD__, ‘我是C类|‘;

}

}classB

{private $c;public function __construct(C $c)

{$this->c = $c;

}public functiondoSomething()

{$this->c->doSomething();echo __METHOD__, ‘我是B类|‘;

}

}classA

{private $b;public function __construct(B $b)

{$this->b = $b;

}public functiondoSomething()

{$this->b->doSomething();echo __METHOD__, ‘我是A类|‘;;

}

}$class = new A(new B(newC()));$class->doSomething(); //C::doSomething我是C类|B::doSomething我是B类|A::doSomething我是A类|

这就是控制反转模式。依赖关系的控制反转到调用链的起点。这样你可以完全控制依赖关系,通过调整不同的注入对象,来控制程序的行为。例如A类用到了memcache,可以在不修改A类代码的情况下,改用redis。

使用依赖注入容器后的思路是应用程序需要到A类,就从容器内取得A类,容器创建C类,再创建B类并把C注入,再创建A类,并把B注入,应用程序调用A方法,A调用B方法,接着做些其它工作.

总之容器负责实例化,注入依赖,处理依赖关系等工作。其实依赖注入不难理解哦。

原文:http://www.cnblogs.com/phpper/p/7781119.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值