久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

搭建自己的PHP MVC框架詳解

這篇文章主要介紹了搭建自己的PHP MVC框架的方法,詳細(xì)分析了php構(gòu)建MVC框架的具體步驟、相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下

本文詳細(xì)講述了搭建自己的PHP MVC框架的方法。分享給大家供大家參考,具體如下:

前言

說到寫PHP的MVC框架,大家想到的第一個(gè)詞--“造輪子”,是的,一個(gè)還沒有深厚功力的程序員,寫出的PHP框架肯定不如那些出自大神們之手、經(jīng)過時(shí)間和各種項(xiàng)目考驗(yàn)的框架。但我還是準(zhǔn)備并且這么做了,主要是因?yàn)椋?/p>

認(rèn)為有關(guān)PHP的方方面面都了解了,但自己學(xué)習(xí)PHP的時(shí)間還短,基礎(chǔ)并不扎實(shí),很多常用函數(shù)的參數(shù)還偶爾要查手冊,而且對于PHP的一些較新的特性如命名空間、反射等只是簡單的看過,并沒有能實(shí)際應(yīng)用過。

PHP的知識多且雜,一個(gè)普通的項(xiàng)目往住是業(yè)務(wù)邏輯代碼為主,而框架是一個(gè)能把這些知識點(diǎn)能融匯在一起的項(xiàng)目。

在自己寫一個(gè)框架的時(shí)候,也會(huì)參考一些我使用過的框架如TP/CI/YII等的源碼,在自己看源碼時(shí)也能幫助自己理解框架,更容易接受以后要使用的框架。

所以說,這次造輪子的目的不是為了造輪子而是為了在造輪子的過程中熟悉其工藝,總結(jié)輪子特點(diǎn),更好的使用輪子。

如果說寫一個(gè)完整的PHP框架,那需要掌握的PHP知識點(diǎn)非常多,像設(shè)計(jì)模式、迭代器、事件與鉤子等等,還有許多基礎(chǔ)知識的靈活應(yīng)用。我自認(rèn)為這些還無法完全掌控,所以我的步驟是先自己搭建一個(gè)骨架,然后參考借鑒不同的PHP框架的特點(diǎn),將其慢慢完善。因?yàn)楣ぷ髟颍彝砩线€要補(bǔ)算法、網(wǎng)絡(luò)等編程基礎(chǔ),PHP框架部分可能只有周末有時(shí)間更新,我會(huì)在進(jìn)行框架功能更新之后,總結(jié)使用的知識點(diǎn),更新博文。

首先放上框架的目前源碼:GITHUB/zhenbianshu

或者點(diǎn)擊此處本站下載

框架整體

首先自己總結(jié)一下PHP的MVC框架的工作流程:

簡單來說,它以一個(gè)入口文件來接受請求,選擇路由,處理請求,返回結(jié)果。

當(dāng)然,幾句話總結(jié)完的東西實(shí)際上要做的工作很多,PHP框架會(huì)在每次接受請求時(shí),定義常量,加載配置文件、基礎(chǔ)類,根據(jù)訪問的URL進(jìn)行邏輯判斷,選擇對應(yīng)的(模塊)控制器和方法,并且自動(dòng)加載對應(yīng)類,處理完請求后,框架會(huì)選擇并渲染對應(yīng)的模板文件,以html頁面的形式返回響應(yīng)。在處理邏輯的時(shí)候,還要考慮到錯(cuò)誤和異常的處理。

1、作為MVC框架,一定要有一個(gè)唯一的入口文件來統(tǒng)領(lǐng)全局,所有的訪問請求都會(huì)首先進(jìn)入這個(gè)入口文件,如我框架根目錄的index.php,在里面,我定義了基本文件夾路徑,當(dāng)前環(huán)境,并根據(jù)當(dāng)前環(huán)境定義錯(cuò)誤報(bào)告的級別。

2、PHP中加載另外的文件,使用require和include,它們都是將目標(biāo)文件內(nèi)容加載到當(dāng)前文件內(nèi),替換掉require或include語句,require是加載進(jìn)來就執(zhí)行,而include是加載進(jìn)來在需要的時(shí)候執(zhí)行,而它們的_once結(jié)構(gòu)都是表示在寫多次的時(shí)候只執(zhí)行一次。

3、框架內(nèi)的配置變量等使用專用的配置文件來保存,這里我仿照了TP里的數(shù)組返回法,用了一個(gè)compileConf()函數(shù)來解析數(shù)組,將數(shù)組的鍵定義為常量,值為數(shù)組的值。

if (!function_exists('compile_conf')) {
  function compileConf($conf) {
    foreach ($conf as $key => $val) {
    if(is_array($val)){
       compileConf($val);
      }else{
      define($key, $val);
      }
    }
   }
}
compileConf(require_once CONF_PATH.'config.php');

命名空間和自動(dòng)加載

為什么把命名空間和自動(dòng)加載放到一塊說呢?

在一個(gè)PHP項(xiàng)目中,類特別多的時(shí)候,如果類名重復(fù)的話就會(huì)造成混亂,而且相同文件夾內(nèi)也不能存在同名的文件,所以這時(shí)候命名空間和文件夾就搭檔出場了。文件夾就是一個(gè)一個(gè)的盒子,命名空間在我理解就像是一個(gè)標(biāo)簽,盒子對應(yīng)標(biāo)簽。我們定義類時(shí),把各種類用不同的盒子分別裝好,并貼上對應(yīng)的標(biāo)簽。而在自動(dòng)加載類時(shí),我們根據(jù)標(biāo)簽(命名空間)可以很輕易找到對應(yīng)的盒子(文件夾)然后找到對應(yīng)的類文件。

而類的自動(dòng)加載,我們知道的__autoload()魔術(shù)函數(shù),它會(huì)在你實(shí)例化一個(gè)當(dāng)前路徑找不到的對象時(shí)自動(dòng)調(diào)用,根據(jù)傳入的類名,在函數(shù)體內(nèi)加載對應(yīng)的類文件。

現(xiàn)在我們多用spl_autoload_register()函數(shù),它可以注冊多個(gè)函數(shù)來代替__autoload函數(shù)的功能,我們傳入一個(gè)函數(shù)名為參數(shù),spl_autoload_register會(huì)將這個(gè)函數(shù)壓入棧中,在實(shí)例化一個(gè)當(dāng)前路徑內(nèi)找不到的類時(shí),系統(tǒng)將會(huì)將函數(shù)出棧依次調(diào)用,直到實(shí)例化成功。

spl_autoload_register('Sqier\Loader::autoLoad');
class Loader {
public static function autoLoad($class) {
  //如果有的話,去除類最左側(cè)的\
  $class = ltrim($class, '\\');
  //獲取類的路徑全名
  $class_path = str_replace('\\', '/', $class) . EXT;
  if (file_exists(SYS_PATH . $class_path)) {
    include SYS_PATH . $class_path;
    return;
  }
  if (file_exists(APP_PATH . $class_path)) {
    include APP_PATH . $class_path;
    return;
  }
}

現(xiàn)在Loader類還是一個(gè)簡單的類,待以后慢慢完善。

路由選擇

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)針對有序表插值查找的相關(guān)操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實(shí)現(xiàn)服務(wù)端分頁的示例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實(shí)現(xiàn)APP微信支付的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實(shí)現(xiàn)的多維數(shù)組排序算法,結(jié)合實(shí)例形式對比分析了php針對多維數(shù)組及帶有鍵名的多維數(shù)組進(jìn)行排序相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
這篇文章主要為大家詳細(xì)介紹了php結(jié)合ajaxuploadfile實(shí)現(xiàn)無刷新文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細(xì)介紹了PHP開發(fā)接口使用RSA進(jìn)行加密解密方法,對此有興趣的朋友可以學(xué)習(xí)下。
主站蜘蛛池模板: 91日韩在线 | 91调教视频| 日本精品视频 | 欧美日韩一区二区三区视频 | 欧美在线观看一区 | 一级做a爱片性色毛片 | 日韩在线精品 | 天天曰天天干 | 九九九色 | 亚洲午夜激情 | 青娱乐福利视频 | 激情婷婷丁香 | 中文久久久 | 青青草国产精品 | 日韩免费一区二区三区 | 亚洲九九夜夜 | 日韩免费网站 | 在线视频a| 亚洲天堂av网 | 134vcc影院免费观看 | 日韩中文字幕一区二区三区 | 亚洲另类色综合网站 | 日韩免费在线视频 | 亚洲另类视频 | 亚洲欧美综合网 | 一色桃子av | 免费黄色av网站 | 色综合天天综合网天天狠天天 | 黄色网址视频 | 性一交一乱一伧老太 | 五月天黄色网址 | 色婷婷中文字幕 | 欧美久久久久久久久久 | 亚洲福利在线观看 | 欧美在线一区二区 | 毛茸茸性猛交xxxx | 一本久 | 欧美日韩一 | 久久一区精品 | 亚洲天堂男人天堂 | 久久久精品免费 |