日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

本文章來給各位介紹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  試試看吧...

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久久久国产一区 | 五月婷婷丁香 | 在线国产一区二区 | 麻豆成人91精品二区三区 | 国产高潮在线观看 | 久久久精品 | 亚洲国产一区二区在线 | 中文字幕一区二区三区日韩精品 | 亚洲高清视频在线 | 二区在线视频 | 91久久国产综合久久91精品网站 | 精品综合| 午夜精品一区二区三区在线 | 日韩一区二区免费视频 | 免费看国产片在线观看 | 天堂成人网| 中文一区在线 | 玖玖玖影院 | 久久久久久久久久久福利 | 天堂电影| 国产免费黄色片 | 在线黄av | 日韩成人在线免费观看 | 成人一级毛片 | www黄色 | 久久成人综合网 | 日韩欧美视频一区二区 | 久久久久久久久国产精品 | 久久久久国产精品免费免费搜索 | 日韩精品视频免费观看 | 狼人综合网 | 亚洲欧洲一区 | 国产精品一二三区 | 欧美黑人巨大xxx极品 | 欧洲一区 | 麻豆高清免费国产一区 | 国产精品一区二区不卡 | www高清 | 婷婷成人精品视频在线观看 | 最近中文字幕视频大全 | 91精品国产乱码久久久久久 |