<?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; }
我們的思路是應(yīng)用程式用到一個(gè)Foo類,就會(huì)創(chuàng)建Foo類並調(diào)用Foo類的方法,假如這個(gè)方法內(nèi)需要一個(gè)Bar類,就會(huì)創(chuàng)建Bar類並調(diào)用Bar類的方法,而這個(gè)方法內(nèi)需要一個(gè)Bim類,就會(huì)創(chuàng)建Bim類,接著做些它工作。使用依賴注入的想法是應(yīng)用程式用到Foo類,F(xiàn)oo類需要Bar類,Bar類需要Bim類,那麼先創(chuàng)建Bim類,再創(chuàng)建Bar類並把Bim注入,再創(chuàng)建Foo類,並把Bar類注入,再呼叫Foo方法,F(xiàn)oo呼叫Bar方法,接著做些它工作。這就是控制反轉(zhuǎn)模式。依賴關(guān)係的控制反轉(zhuǎn)到呼叫鏈的起點(diǎn)。這樣你可以完全控制依賴關(guān)係,透過調(diào)整不同的注入對(duì)象,來控製程式的行為。例如Foo類別用到了memcache,可以在不修改Foo類別程式碼的情況下,改用redis。
使用依賴注入容器後的思路是應(yīng)用程式需要到Foo類,就從容器內(nèi)取得Foo類,容器創(chuàng)建Bim類,再創(chuàng)建Bar類並把Bim注入,再創(chuàng)建Foo類,並把Bar注入,應(yīng)用程式呼叫Foo方法,F(xiàn)oo呼叫Bar方法,接著做些它工作.總之容器負(fù)責(zé)實(shí)例化,注入依賴,處理依賴關(guān)係等工作。
本站所有資源皆由網(wǎng)友貢獻(xiàn)或各大下載網(wǎng)站轉(zhuǎn)載。請(qǐng)自行檢查軟體的完整性!本站所有資源僅供學(xué)習(xí)參考。請(qǐng)不要將它們用於商業(yè)目的。否則,一切後果都由您負(fù)責(zé)!如有侵權(quán),請(qǐng)聯(lián)絡(luò)我們刪除。聯(lián)絡(luò)方式:admin@php.cn
相關(guān)文章

03 Jul 2025
Laravel的服務(wù)容器是一個(gè)管理類依賴和執(zhí)行依賴注入的核心工具,其通過自動(dòng)實(shí)例化對(duì)象及其遞歸依賴,簡化了代碼開發(fā)與維護(hù)。 1.服務(wù)容器就像一個(gè)“工廠”,能自動(dòng)創(chuàng)建並傳遞所需的對(duì)象;2.支持構(gòu)造函數(shù)注入(最常用)、方法注入(控制器中使用類型提示)、setter注入(適合可選依賴);3.綁定方式包括簡單綁定、單例綁定、接口綁定實(shí)現(xiàn)類,實(shí)現(xiàn)解耦;4.多數(shù)情況下容器自動(dòng)解析依賴,也可通過app()或make()手動(dòng)獲取實(shí)例;5.可為綁定設(shè)置別名,並通過服務(wù)提供者註冊(cè)綁定,提升應(yīng)用組織結(jié)構(gòu)與可維護(hù)性。

04 Jun 2025
服務(wù)容器與依賴注入容器在PHP框架中常被提及,二者雖相關(guān)但有區(qū)別。依賴注入容器(DIC)專注於自動(dòng)解析類依賴,例如通過構(gòu)造函數(shù)注入對(duì)象,而無需手動(dòng)實(shí)例化。服務(wù)容器在此基礎(chǔ)上擴(kuò)展了功能,包括綁定接口到具體實(shí)現(xiàn)、註冊(cè)單例、管理共享實(shí)例等。使用時(shí),若討論的是類依賴解析或跨框架場景,應(yīng)稱其為DIC;若涉及框架內(nèi)服務(wù)管理,則稱為服務(wù)容器。二者在現(xiàn)代框架中常融合,但理解其差異有助於深入掌握框架機(jī)制。

03 Sep 2025
定義容器結(jié)構(gòu),包含bindings和instances映射及讀寫鎖;2.通過Bind方法註冊(cè)構(gòu)造函數(shù),使用反射驗(yàn)證並存儲(chǔ)構(gòu)造函數(shù)及其返回類型;3.使用Get方法通過反射遞歸解析依賴,調(diào)用構(gòu)造函數(shù)並緩存實(shí)例;4.提供Invoke方法簡化獲取依賴的流程,通過指針注入實(shí)例;5.示例中展示數(shù)據(jù)庫和服務(wù)的注入,輸出顯示依賴被正確解析且單例生效。該DI容器利用反射實(shí)現(xiàn)依賴的自動(dòng)解析與管理,支持構(gòu)造函數(shù)注入和懶加載,適用於中小型應(yīng)用。

13 May 2025
aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強(qiáng)codemodocultion,可驗(yàn)證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

28 Oct 2024
在 PHP 中從外部類別利用 ??MySQL您從 PHP 5.6 到 7.0 的遷移以及相應(yīng)的資料庫調(diào)整從 MySql 到 Mysqli...


熱門工具標(biāo)籤

熱工具

50個(gè)優(yōu)秀經(jīng)典PHP演算法大集合
經(jīng)典PHP演算法,學(xué)習(xí)優(yōu)秀的想法 , 開拓思維

小巧的最佳化圖片的PHP庫
小巧的最佳化圖片的PHP庫

中獎(jiǎng)機(jī)率演算法的php函數(shù)類
中獎(jiǎng)機(jī)率演算法的php函數(shù)類
