多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > PHP MVC框架之加載器學習筆記

PHP MVC框架之加載器學習筆記

來源:程序員人生   發布時間:2014-01-20 16:30:23 閱讀次數:2423次

本文章來給各位介紹PHP MVC框架之加載器學習筆記,有需要了解的朋友可進入參考.上節說了MVC的路由原理,這節我們來說說MVC框架的loader,也稱為加載器.雖然不同的框架,加載器的用法不同,但是其原理都是相通的...都是通過單例模式加載文件,而且把已加載的文件cache起來,避免重復加載...因為在開發業務的過程中,常常需要加載不同的模塊,不同的類庫等,MVC的loader可以幫助我們實現單例模式,更加符合開發需求.下面我們開始動手,利用其原理,做一個簡單的loader.

首先,我們設計的加載器,要滿足可以全局使用,無論在controller里還是在model、library里都可以使用.

其次,加載器要有緩存能力,即相同的文件只加載一次,相同的類只實例化一次.

最后,要能加載多種文件,model、library、helper.

先解決第一步,怎么全局使用,最簡單的辦法就是定義一個全局的function,這樣,在后面的不同類庫,不同function里都可以調用這個全局function,進行加載文件.

第二步和第三步,要一起解決,定義一個單例模式的loader類,因為是單例模式,可以保證全局只有一份內容,這樣的話,就可以利用數組把這些已加載的內容和對象cache起來,這樣就可以避免了重復加載的問題...

實例代碼如下:

  1. if ( ! function_exists(‘load’))    
  2. {    
  3.     function load($name$type=’model’, $data=array())    
  4.     {    
  5.         static $loader = NULL;    
  6.         if (is_null($loader))    
  7.         {    
  8.             include (ROOT.’/system/core/loader.php’);    
  9.             $loader = Loader::get_instance();    
  10.         }    
  11.    
  12.         return $loader->$type($name$data);    
  13.     }    
  14. }   

上面這個,就是我寫的一個簡單的全局函數 load,這個函數的作用就是為了可以全局調用,然后通過這個load函數,去調用loader類,由loader類負責加載文件,實例化,和緩存對象...下面我把loader的代碼放出來給大家看看.

實例代碼如下:

  1. <?php    
  2.    
  3. class Loader    
  4. {    
  5.     private $_loaded_models = array();    
  6.     private $_loaded_librarys = array();    
  7.     private static $OBJ;    
  8.    
  9.     # 單例模式,不允許new對象    
  10.     private function __construct()    
  11.     {    
  12.    
  13.     }    
  14.      
  15.     public static function get_instance()    
  16.     {    
  17.         if (is_null(self::$OBJ))    
  18.         {    
  19.             $class = __CLASS__;    
  20.             self::$OBJ = new $class;    
  21.         }    
  22.             
  23.         return self::$OBJ;    
  24.     }    
  25.    
  26.     public function model($model$data=array())    
  27.     {    
  28.         $model = strtolower($model);    
  29.    
  30.         # 如果已經加載,則返回對象,避免重復加載    
  31.         if (isset($this->_loaded_models[$model]))    
  32.         {    
  33.             return $this->_loaded_models[$model];    
  34.         }    
  35.    
  36.         # 否則加載文件    
  37.         include ROOT.“/application/models/{$model}.php”;    
  38.    
  39.         $class = ucfirst($model);    
  40.         # 實例化對象    
  41.         if (emptyempty($data))    
  42.         {    
  43.             $instance = new $class;    
  44.         }    
  45.         else   
  46.         {    
  47.             $instance = new $class($data);    
  48.         }    
  49.         # 把對象cache起來    
  50.         $this->_loaded_models[$model] = $instance;    
  51.    
  52.         return $instance;    
  53.     }    
  54.    
  55.    
  56.     public function library($library$data=array())    
  57.     {    
  58.         $library = strtolower($library);    
  59.    
  60.         # 如果已經加載,則返回對象,避免重復加載    
  61.         if (isset($this->_loaded_librarys[$library]))    
  62.         {    
  63.             return $this->_loaded_librarys[$library];    
  64.         }    
  65.    
  66.         # 否則加載文件    
  67.         include ROOT.“/application/librarys/{$library}.php”;    
  68.    
  69.         $class = ucfirst($library);    
  70.         # 實例化對象    
  71.         if (emptyempty($data))    
  72.         {    
  73.             $instance = new $class;    
  74.         }    
  75.         else   
  76.         {    
  77.             $instance = new $class($data);    
  78.         }    
  79.             
  80.         # 把對象cache起來    
  81.         $this->_loaded_librarys[$library] = $instance;    
  82.    
  83.         return $instance;    
  84.     }    
  85.    
  86. }    
  87. ?>   

大家看到了沒有,這個loader采用的是單例模式,雖然前面的function的設計已經可以保證不會重復實例化loader這個對象,但是為了真正可以保證全局只有一份loader對象,設計成單例模式是最保險的...

具體的測試例子請看代碼...我把代碼打包上傳上來,有需要的就下載回去看看吧...下載后,解壓,把lesson2文件夾放到你的www目錄下,然后訪問yourdomain/MVC/lesson2/index.php/index/test  試試看吧...

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲国产一级毛片 | 亚洲国产日韩综合久久精品 | 一区二区三区四区在线视频 | 欧美一级三级 | 欧美日韩国产亚洲综合不卡 | 欧美一级黄色片视频 | 久操免费在线 | 亚洲国产日韩综合久久精品 | 欧美艳星性videose精品 | 99热自拍 | 最近更新中文字幕7 | 亚洲男人精品 | 日韩精品亚洲人成在线播放 | 特一级黄色片 | 国产香蕉偷在线观看视频 | 国产精品免费播放 | 精品a | 久久久久国产一级毛片高清片 | 91av福利| 91精品久久久久久久久网影视 | 欧美激情免费a视频 | 亚洲一区二区黄色 | 六九视频在线观看 | 最近免费字幕中文大全在线观看 | 亚洲不卡 | 国内精品视频 在线播放 | 性欧美videofree另类hd | 欧美性猛交黑人xxxx | 亚洲免费精品视频 | 91在线丨亚洲 | 2021午夜国产精品福利 | 欧美色v | 国产欧美一区二区三区免费 | 中国漂亮护士一级毛片 | 最近新中文字幕大全高清视频 | 依人在线观看 | 国产a级淫片 | 国产亚洲在线观看 | 欧美美女一级片 | 日韩欧美精品 | 99爱视频在线观看 |