SL的目的也是解耦,並且非常適合基於服務和元件的應用。
Service Locator扮演了一個運行時的連結器的角色,可以在運行時動態地修改一個類別所要選用的服務, 而不必對類作任何的修改。
一個類別可以在運作時,有針對性地增減、替換所要用到的服務,從而得到一定程度的最佳化。
實作服務提供者、服務使用方完全的解耦,方便獨立測試和程式碼跨框架重複使用。
基本功能
Yii中的SL由yiidiServiceLocator
實作
<code>class ServiceLocator extends Component{ // 用于缓存服务、组件等的实例 private $_components = []; // 保存服务和组件的定义,通常为配置数组,可以用来创建具体的实例 private $_definitions = []; // 重载了getter, 使得访问服务和组件与访问类的属性一样。 // 保留了原来Component的getter所具有的功能 public function __get($name){} }</code>
資料結構
SL提供了註冊服務和元件的方法。
$_components用於快取SL中的元件或服務的實例,為可讀寫的屬性。
參考
以上就介紹了Yii原始碼解讀-服務定位器(Service Locator),包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。