<?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
相關文章
17Jul2017
前言 終於要講到這個著名的設計原則,其實它比其他設計模式都簡單。 依賴注入的實質就是把一個類別不可能更換的部分 和 可更換的部分 分離開來,透過注入的方式來使用,從而達到解耦的目的。這裡就舉個資料庫連結的栗子,希望大家理解一個資料庫連接類別class Mysql{ private $host; private $port; private $username;
26Apr2024
如何建立支援依賴項注入(DI)的PHP函數庫:建立Composer套件作為函數庫。實作函數庫功能,如在檔案中實作一個問候函數。安裝PhpDI容器並建立容器配置,將函數庫類別作為工廠定義添加到容器中。在程式碼中使用函數庫並注入依賴項,例如使用容器取得函數庫類別的實例。在實際應用中,例如將使用者資料儲存到資料庫,注入資料庫連線以提高靈活性。
06May2024
依賴注入(DI)可增強單元測試的可測試性,透過將模擬的依賴項注入到類別中,而不是在類別本身中建立或尋找它們。 PHPUnit框架提供強大的斷言程式庫和測試人員,支援使用DI進行複雜測試。透過注入模擬的依賴項,我們可以專注於測試實際邏輯,而無需擔心實際依賴項的實作細節。
03Apr2024
目錄什麼是DI/依賴注入依賴注入出現的原因簡單的依賴注入高階的依賴注入依賴注入的應用依賴注入高階優化什麼是DI/依賴注入依賴注入DI其實本質上是指對類的依賴通過構造器完成自動注入通俗來說,就是你目前操作一個類,但是這個類的某些方法或者功能不是單單只靠這個類就能完成的,而是要藉助另一個類的才能完成的最直接的標誌就是傳參資料為對象的時候。嚴格來說,你想在一個類別中操作另一個類別,這兩個類別之間形成了相互依賴關係,傳參的方式叫注入依賴注入出現的原因在未使用依賴注入的時候,PHP需要在一個類別中使用另一個類別的時
06Feb2018
PHP具有完整的反射 API,提供了對類別、介面、函數、方法和擴充進行逆向工程的能力。透過類別的反射提供的能力我們能夠知道類別是如何被定義的,它有什麼屬性、什麼方法、方法都有哪些參數,類別檔案的路徑是什麼等很重要的資訊。也正式因為類別的反射很多PHP框架才能實現依賴注入自動解決類別與類別之間的依賴關係,這為我們平時的開發帶來了很大的方便。
16Dec2016
aravel框架的依賴注入確實很強大,並且透過容器實現依賴注入可以有選擇性的加載需要的服務,減少初始化框架的開銷,下面是我在網上看到的一個帖子,寫的很好拿來與大家分享,