註冊者模式 (registry) 提供了在程序中有條理的存放並管理對象 (object)一種解決方案 ,它的主要做用是防止用戶濫用全局對象 (global object) 。濫用全局對象可能會致使對象可見性混亂、安全性受到威脅等問題。而使用註冊者模式也是實現依賴注入思想的一個類型示例。php
Zend Framework的Zend_Registry組件提供了惟一的存、取、銷燬對象的方法。是註冊者模式的經典案例。Zend_Registry組件的實 現很是簡單,只有一個文件(Registry.php)。Zend_Registry繼承自ArrayObject類,ArrayObject類屬於 SPL(Standard PHP Library -> PHP標準庫)一部分。Zend_Registry類繼承了ArrayObject類後就讓存儲其中的對象有了像數組同樣工做的能力。數組
咱們的代碼 Zend_Registry::set('log',$logger); 實際上就是調用了offsetSet方法來存儲了咱們的全局對象$logger。Zend_Registry::get('log');就調用了 offsetGet方法。對象的以數組訪問的能力和存儲的具體實現都是由ArrayObject類完成的。安全
咱們使用Zend_Registry組件就很好的管理了全局對象,爲全局對象的存取傳遞提供了一個臨時空間,這樣就避免了在須要時建立某個對象或乾脆就硬編碼對象到變量;從而保證了應用的靈活性。這也是依賴注入思想的一個解決方案。編碼