摘要:服務(wù)容器接口是的簡(jiǎn)寫(xiě),由組織制定的規(guī)范,是開(kāi)發(fā)的實(shí)踐標(biāo)準(zhǔn)。實(shí)現(xiàn)的容器類(lèi)源碼很簡(jiǎn)單,主要是傳入變量,然后設(shè)置這個(gè)兩個(gè)方法。原創(chuàng)文章,歡迎轉(zhuǎn)載。原文鏈接地址作者發(fā)表日期
接著上篇 還有一些內(nèi)容沒(méi)有寫(xiě),上篇已經(jīng)把關(guān)于 Pimple 最主要的代碼分析了一下,這篇主要是關(guān)于 PSR-11 兼容性的分析。
PSR-11 服務(wù)容器接口 PSRPSR 是 PHP Standard Recommendations 的簡(jiǎn)寫(xiě),由 PHP FIG 組織制定的 PHP 規(guī)范,是 PHP 開(kāi)發(fā)的實(shí)踐標(biāo)準(zhǔn) 。
有一份 PSR 中文版 推薦看看,不過(guò)由于是翻譯的,難免不是很及時(shí),但是對(duì)于理解 PSR 1 - PSR 7 還是很有幫助的。
PSR-11 是服務(wù)容器接口 。
interface ContainerInterface { public function get($id); public function has($id); }
只需要實(shí)現(xiàn)這個(gè)兩個(gè)接口就行。
Pimple - PSR-11 兼容性Pimple 的作者自己也說(shuō)了,由于歷史原因,沒(méi)有實(shí)現(xiàn) PSR-11,但是提供了輔助類(lèi) 。
1、PimplePsr11Container.php
2、PimplePsr11ServiceLocator.php
3、PimpleServiceIterator.php
實(shí)現(xiàn) PSR-11 的容器類(lèi)
final class Container implements ContainerInterface { private $pimple; public function __construct(PimpleContainer $pimple) { $this->pimple = $pimple; } public function get($id) { return $this->pimple[$id]; } public function has($id) { return isset($this->pimple[$id]); } }
源碼很簡(jiǎn)單,主要是傳入 pimple 變量,然后設(shè)置 get、has 這個(gè)兩個(gè)方法。
PimplePsr11ServiceLocator.php服務(wù)定位
1、在獲取依賴(lài) service 的時(shí)候,傳入有限個(gè) service,而不是全部
2、可以為 service 設(shè)置別名
服務(wù)迭代,實(shí)現(xiàn)了 Iterator 接口,可以循環(huán) service 。
總結(jié)Pimple 的確是一個(gè)簡(jiǎn)單的依賴(lài)注入容器,代碼很容易看懂,對(duì)于學(xué)習(xí)入門(mén)來(lái)說(shuō)很好,比 Laravel 的 DI 好懂多了。
原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請(qǐng)注明出處,謝謝。
原文鏈接地址:http://dryyun.com/2018/04/19/...
作者: dryyun
發(fā)表日期: 2018-04-19 16:03:02
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28646.html
摘要:也就是閑時(shí)為了寫(xiě)文章而寫(xiě)的一篇關(guān)于源碼的閱讀筆記。是標(biāo)準(zhǔn)庫(kù)的縮寫(xiě),一組旨在解決標(biāo)準(zhǔn)問(wèn)題的接口和類(lèi)的集合。提供了一套標(biāo)準(zhǔn)的數(shù)據(jù)結(jié)構(gòu),一組遍歷對(duì)象的迭代器,一組接口,一組標(biāo)準(zhǔn)的異常,一系列用于處理文件的類(lèi),提供了一組函數(shù),具體可以查看文檔。 也就是閑時(shí)為了寫(xiě)文章而寫(xiě)的一篇關(guān)于 Pimple 源碼的閱讀筆記。Pimple 代碼有兩種編碼方式,一種是以 PHP 編寫(xiě)的,另一種是以 C 擴(kuò)展編寫(xiě)...
摘要:已經(jīng)有了非常好的的相關(guān)解析,建議先看下一個(gè)簡(jiǎn)單的依賴(lài)注入容器讀源碼筆記上讀源碼筆記下這里通過(guò)例子補(bǔ)充下核心方法的說(shuō)明相關(guān)的類(lèi)型服務(wù)類(lèi)似單例工廠服務(wù)多個(gè)實(shí)例參數(shù)僅僅是保存一些變量保護(hù)參數(shù)匿名函數(shù)都會(huì)被認(rèn)為服務(wù),但是如果僅僅是想作為一個(gè) 已經(jīng)有了非常好的Pimple的相關(guān)解析,建議先看下:Pimple - 一個(gè)簡(jiǎn)單的 PHP 依賴(lài)注入容器讀 PHP - Pimple 源碼筆記(上)讀 PH...
摘要:服務(wù)通過(guò)匿名函數(shù)定義,返回一個(gè)對(duì)象的實(shí)例定義一些服務(wù)請(qǐng)注意,匿名函數(shù)可以訪問(wèn)當(dāng)前容器實(shí)例,從而允許引用其他服務(wù)或參數(shù)。如果要為所有調(diào)用返回不同的實(shí)例,請(qǐng)使用方法包裝你的匿名函數(shù)。 鏈接 官網(wǎng) WebSite GitHub - Pimple 這是 Pimple 3.x 的文檔。如果你正在使用 Pimple 1.x ,請(qǐng)查看 Pimple 1.x 文檔。閱讀 Pimple 1.x ...
摘要:實(shí)際上,閉包和匿名函數(shù)是偽裝成函數(shù)的對(duì)象。容器流程淺析是社區(qū)中比較流行的容器。服務(wù)提供者服務(wù)提供者是連接容器與具體功能實(shí)現(xiàn)類(lèi)的橋梁。服務(wù)提供者需要實(shí)現(xiàn)接口所有服務(wù)提供者必須實(shí)現(xiàn)接口方法。但已經(jīng)完成了服務(wù)提供者的注冊(cè)工作。 需要具備的知識(shí)點(diǎn) 閉包 閉包和匿名函數(shù)在PHP5.3.0中引入的。 閉包是指:創(chuàng)建時(shí)封裝周?chē)鸂顟B(tài)的函數(shù)。即使閉包所處的環(huán)境不存在了,閉包中封裝的狀態(tài)依然存在。 理論上...
摘要:安裝代碼加載并實(shí)例化參數(shù)存儲(chǔ)單例存儲(chǔ)非單例存儲(chǔ)存儲(chǔ)匿名函數(shù)獲取匿名函數(shù)服務(wù)提供者文檔官網(wǎng)文檔 Pimple/Container 安裝 composer require pimple/pimple: ^3.0 代碼 加載并實(shí)例化 require __DIR__ . /vendor/autoload.php; $pc = new PimpleContainer(); 參數(shù)存儲(chǔ) $pc[ap...
閱讀 3096·2023-04-25 20:43
閱讀 1727·2021-09-30 09:54
閱讀 1600·2021-09-24 09:47
閱讀 2889·2021-09-06 15:02
閱讀 3522·2021-02-22 17:09
閱讀 1245·2019-08-30 15:53
閱讀 1448·2019-08-29 17:04
閱讀 1969·2019-08-28 18:22