<?php namespace Auryn; class CachingReflector implements Reflector { const CACHE_KEY_CLASSES = 'auryn.refls.classes.'; const CACHE_KEY_CTORS = 'auryn.refls.ctors.'; const CACHE_KEY_CTOR_PARAMS = 'auryn.refls.ctor-params.'; const CACHE_KEY_FUNCS = 'auryn.refls.funcs.'; const CACHE_KEY_METHODS = 'auryn.refls.methods.'; private $reflector; private $cache; public function __construct(Reflector $reflector = null, ReflectionCache $cache = null) { $this->reflector = $reflector ?: new StandardReflector; $this->cache = $cache ?: new ReflectionCacheArray; } public function getClass($class) { $cacheKey = self::CACHE_KEY_CLASSES . strtolower($class); if (!$reflectionClass = $this->cache->fetch($cacheKey)) { $reflectionClass = new \ReflectionClass($class); $this->cache->store($cacheKey, $reflectionClass); } return $reflectionClass; }
我们的思路是应用程序用到一个Foo类,就会创建Foo类并调用Foo类的方法,假如这个方法内需要一个Bar类,就会创建Bar类并调用Bar类的方法,而这个方法内需要一个Bim类,就会创建Bim类,接着做些其它工作。使用依赖注入的思路是应用程序用到Foo类,Foo类需要Bar类,Bar类需要Bim类,那么先创建Bim类,再创建Bar类并把Bim注入,再创建Foo类,并把Bar类注入,再调用Foo方法,Foo调用Bar方法,接着做些其它工作。这就是控制反转模式。依赖关系的控制反转到调用链的起点。这样你可以完全控制依赖关系,通过调整不同的注入对象,来控制程序的行为。例如Foo类用到了memcache,可以在不修改Foo类代码的情况下,改用redis。
使用依赖注入容器后的思路是应用程序需要到Foo类,就从容器内取得Foo类,容器创建Bim类,再创建Bar类并把Bim注入,再创建Foo类,并把Bar注入,应用程序调用Foo方法,Foo调用Bar方法,接着做些其它工作.总之容器负责实例化,注入依赖,处理依赖关系等工作。
本站所有资源均由网友贡献或各大下载网站转载。请自行检查软件的完整性!本站所有资源仅供学习参考。请不要将它们用于商业目的。否则,一切后果由您负责!如有侵权,请联系我们删除。联系方式:admin@php.cn
相关文章

03 Jul 2025
Laravel的服务容器是一个管理类依赖和执行依赖注入的核心工具,其通过自动实例化对象及其递归依赖,简化了代码开发与维护。1.服务容器就像一个“工厂”,能自动创建并传递所需的对象;2.支持构造函数注入(最常用)、方法注入(控制器中使用类型提示)、setter注入(适合可选依赖);3.绑定方式包括简单绑定、单例绑定、接口绑定实现类,实现解耦;4.多数情况下容器自动解析依赖,也可通过app()或make()手动获取实例;5.可为绑定设置别名,并通过服务提供者注册绑定,提升应用组织结构与可维护性。

15 Feb 2025
本文探讨如何构建一个简单的依赖注入容器(DI 容器)PHP 包。文中所有代码,包括 PHPDoc 注解和单元测试(100% 代码覆盖率),都已上传至 GitHub 仓库,并在 Packagist 上列出。 关键要点: 构建 DI 容器有助于开发者理解依赖注入的基本原理和容器的工作机制。 DI 容器主要有两个作用:“依赖注入”和“容器”。它需要能够使用构造器注入或设置器注入方法来实例化和包含服务。 Symfony 依赖注入容器可作为创建自定义容器的参考。它将容器配置分为参数和服务,允许安全存储

03 Sep 2025
定义容器结构,包含bindings和instances映射及读写锁;2.通过Bind方法注册构造函数,使用反射验证并存储构造函数及其返回类型;3.使用Get方法通过反射递归解析依赖,调用构造函数并缓存实例;4.提供Invoke方法简化获取依赖的流程,通过指针注入实例;5.示例中展示数据库和服务的注入,输出显示依赖被正确解析且单例生效。该DI容器利用反射实现依赖的自动解析与管理,支持构造函数注入和懒加载,适用于中小型应用。

13 May 2025
aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

04 Jun 2025
服务容器与依赖注入容器在PHP框架中常被提及,二者虽相关但有区别。依赖注入容器(DIC)专注于自动解析类依赖,例如通过构造函数注入对象,而无需手动实例化。服务容器在此基础上扩展了功能,包括绑定接口到具体实现、注册单例、管理共享实例等。使用时,若讨论的是类依赖解析或跨框架场景,应称其为DIC;若涉及框架内服务管理,则称为服务容器。二者在现代框架中常融合,但理解其差异有助于深入掌握框架机制。


热工具
