Yaf零基礎學習總結5-Yaf類的自動加載


Yaf零基礎學習總結5-Yaf類的自動加載

 

框架的一個重要功能就是類的自動加載了,在第一個demo的時候我們就約定自己的項目的目錄結構,框架就基於這個目錄結構來自動加載需要的類文件。 

Yaf在自啟動的時候, 會通過SPL注冊一個自己的Autoloader, 出於性能的考慮, 對於框架相關的MVC類, Yaf Autoloader只以目錄映射的方式嘗試一次. 

具體的目錄映射規則如下: 

對於控制器 Controller 默認模塊下為{項目路徑}/controllers/, 否則為{項目路徑}/modules/{模塊名}/controllers 比如IndexController,這自動加載文件 {項目目錄}/Controllers/Index.php 

對於Model 加載路徑為{項目目錄}/models/ 類似比如UserModel則自動加載{項目目錄}/models/User.php 

其它規則比如actions,plugin也都類似 

而對於非框架MVC相關的類, Yaf支持全局類和自身類的兩種加載方式, 並且Yaf支持大小寫敏感和不敏感兩種方式來處理文件路徑. 

全局類和自身類(本地類) 

Yaf為了方便在一台服務器上部署的不同產品之間共享公司級別的共享庫, 支持全局類和本地類兩種加載方式. 
全局類是指, 所有產品之間共享的類, 這些類庫的路徑是通過ap.library在php.ini(當然,如果PHP在編譯的時候, 支持了with-config-file-scan-dir,那么也可以寫在單獨的ap.ini中) 

而本地類是指, 產品自身的類庫, 這些類庫的路徑是通過在產品的配置文件中, 通過ap.library配置的.在Yaf中, 通過調用Yaf_Loader的registerLocalNamespace方法, 來申明那些類前綴是本地類, 即可. 

注意:在use_spl_autoload關閉的情況下, Yaf Autoloader在一次找不到的情況下, 會立即返回, 而剝奪其后的自動加載器的執行機會. 

Yaf中類的加載規則 

類的加載規則, 都是一樣的: Yaf規定類名中必須包含路徑信息, 也就是以下划線"_"分割的目錄信息. Yaf將依照類名中的目錄信息, 完成自動加載. 如下的例子, 在沒有申明本地類的情況下: 

一個映射的例子Zend_Dummy_Foo 
//Yaf將在如下路徑尋找類Foo_Dummy_Bar 
{類庫路徑(php.ini中指定的ap.library)}/Foo/Dummy/Bar.php 



而, 如果通過如下方式調用了registerLocalNamespace:注冊本地類 
[php]  view plain copy
 
  1. //申明, 凡是以Foo和Local開頭的類, 都是本地類  
  2.      $loader = Yaf_Loader::getIgnstance();  
  3.      $loader->registerLocalNamespace(array("Foo", "Local"));  


那么對於剛才的例子, 將會在如下路徑尋找Foo_Dummy_Bar 
//Yaf將在如下路徑尋找類Foo_Dummy_Bar 
{類庫路徑(conf/application.ini中指定的ap.library)}/Foo/Dummy/Bar.php 



通過這個例子,大家應該知道了Yaf的類的加載規則了,也能區分全局類和本地類 

參考來源: 
Yaf零基礎學習總結5-Yaf類的自動加載
http://www.lai18.com/content/407152.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM