<?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)用程式用到一個Foo類,就會創(chuàng)建Foo類並調(diào)用Foo類的方法,假如這個方法內(nèi)需要一個Bar類,就會創(chuàng)建Bar類並調(diào)用Bar類的方法,而這個方法內(nèi)需要一個Bim類,就會創(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)到呼叫鏈的起點。這樣你可以完全控制依賴關(guān)係,透過調(diào)整不同的注入對象,來控製程式的行為。例如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é)實例化,注入依賴,處理依賴關(guān)係等工作。
本站所有資源皆由網(wǎng)友貢獻(xiàn)或各大下載網(wǎng)站轉(zhuǎn)載。請自行檢查軟體的完整性!本站所有資源僅供學(xué)習(xí)參考。請不要將它們用於商業(yè)目的。否則,一切後果都由您負(fù)責(zé)!如有侵權(quán),請聯(lián)絡(luò)我們刪除。聯(lián)絡(luò)方式:admin@php.cn
相關(guān)文章

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

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

13 May 2025
aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

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


熱門工具標(biāo)籤

熱工具

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

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

中獎機率演算法的php函數(shù)類
中獎機率演算法的php函數(shù)類
