<?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
相關文章

20Feb2025
關鍵要點 依賴注入容器(DIC)是在較大的PHP應用程序和框架中維護代碼庫的關鍵工具,但會影響性能。 PHP的一些眾所周知的DIC包括PHP-DI,Symfony \ depentencyIndostion,Ze

15Feb2025
本文探討如何構建一個簡單的依賴注入容器(DI 容器)PHP 包。文中所有代碼,包括 PHPDoc 註解和單元測試(100% 代碼覆蓋率),都已上傳至 GitHub 倉庫,並在 Packagist 上列出。 關鍵要點: 構建 DI 容器有助於開發者理解依賴注入的基本原理和容器的工作機制。 DI 容器主要有兩個作用:“依賴注入”和“容器”。它需要能夠使用構造器注入或設置器注入方法來實例化和包含服務。 Symfony 依賴注入容器可作為創建自定義容器的參考。它將容器配置分為參數和服務,允許安全存儲

28Oct2024
在 PHP 中從外部類別利用 MySQL您從 PHP 5.6 到 7.0 的遷移以及相應的資料庫調整從 MySql 到 Mysqli...

04Jan2025
在 PHP 8.4 中探索使用惰性物件的依賴注入 在現代 PHP 領域,8.4 版的發布引入了一項突破性的功能:惰性物件。這些物件提供了一種將初始化推遲到絕對必要的新方法


Hot Tools
