首頁  >  文章  >  php教程  >  手寫一個自己的簡單MVC框架myPHP

手寫一個自己的簡單MVC框架myPHP

WBOY
WBOY原創
2016-08-08 08:49:491848瀏覽

myPHP框架

      採用的是MVC 思想,並應用純粹物件導向及專案單一入口,實現的一個自訂的架構。 (自己興趣的練習)

一、專案單一入口

入口文件

myphpindex.php前台

      一個網站所有的請求都請求一個文件(入口文件)index.phpadmin.php。入口很簡單,用來定義一個存取的權限,引入初始化檔案

初始化檔

      字符集

      路徑

      設定檔

      自動載入

      系統錯誤display_errors='on'      error_reporting =E_ALL

      主要用於實現字元集的設定、路徑常數的配置、設定檔、系統錯誤等,分析URL中的模組或行為,之後自動分發模組與行為(本質就是實例化對象,並呼叫物件的方法 )。 Application

 

控制器C

      主要依據使用者的請求完成業務邏輯處理。呼叫模型(M),接收資料,並呼叫視圖類別來處理數據,回顯資料給使用者。

模型M

      一個模型對應資料表,模型在程式碼中體現是一個類別。類別中的方法就是根據使用者的業務請求實現的對資料表的操作SQL語句(使用者的請求最終在模型中的體現是一條SQL)。

      SQL語句的執行由DB類別(本架構中使用的是自已封裝的PDO類別)來執行。

視圖V

      主要用於實現將資料顯示在HTML頁面中。

自己畫的圖:

MVC的優勢:各司其職,互不干擾,有利於開發中的分工;

                 有利於程式碼的重複使用;

                 市場上主流的架構基本上符合MVC的想法。

二、搭建框架myPHP

      在一個網站中會使用許多文件,合理的做法,是使用目錄 分門別類的進行存放。

1、目錄結構:

對於一個網站有前台部分與後台部分,有兩種實作方案:

      1、雙主機(兩個網域),前台與後台各對應一個網域名稱。安全

      2、前後台共用一個主機。方便(首先方案)

 

X:根據你自己搭的環境的路徑myphp                     網站根目錄

X:根據你自己搭的環境的路徑myphpAdmin       網站後台主目錄

 這裡所創造的資料夾:

 

2、建立主機

在httpd-vhosts.conf設定檔設定

 

3、入口文件

在/myphp/下建立index.php檔案

 

說明:

      在入口檔案定義ACCESS常數,在其後的所有的PHP檔案中判斷此常數,如果有,則表示合法訪問,如果沒有,則表示非法存取

      由於引入的Application.class.php檔案中使用命名空間,因此在存取Application類別時需要使用非限定存取。 CoreApplication::run();

拓展:

      另一個實現專案單一入口的方案是使用Apache的rewrite機制。

4、初始化檔

a、在core目錄建立Application.class.php檔案

 

先進行測試是否可以存取;注意:在下面我不會截圖到class名那裡,所有的方法都是在類別內的。

b、在Application類別中建立setChar方法來完成字元集的設定

 

在寫入一個私有的靜態方法後需要在作為單一出口的公有靜態方法訪問使其生效:注意:在下面我不會再多截圖其他方法的單一出口,都在這裡面。

c、設定係統錯誤處理方式

 

一般在做開發的時候,為防止使用者看到錯誤訊息,而出現的不友善介面,故一般性會在php.ini的設定檔display_errors=off;關閉

d、定義目錄常數

      由於php檔案中會頻繁的引入文件,被引入的文件存放在目錄內,為了統一管理,方便維護,將目錄的絕對路徑,設定為目錄常數

(echo,var_dump是進行一些調式,查看你想要的資訊是否正確)

e、引入設定檔

      設定檔中的設定的資訊一般是網站中可能會更改,但很少更改的資訊

建立設定檔myphp/config/config.php

 

 

說明:

      php檔案中的return是將資料傳回檔案包含語句處(include、require)

 

總結:

      全域變數         則在全域化

      局部變數          所定義的函數內

      類別屬性            

      全域常數          可跨類別使用

      $_SESSION      可在腳本使用中使用

     

f、自動載入

      __autoload();                    由PHP自動上載機所呼叫的

      spl_autoload_register();        為我們提供的與自動載入機制中新增多個類似__autoload()的函數。

調試要在單入口進行測試:

其他資料夾的自動載入:一般只載入有類別檔案的資料夾

 註冊指定函數為自動載入函數:

說明

所有loadCore、loadController、loadModel等,都被autoLoad調用,

autoLoad又在

run方法中被呼叫

所有的類別的實例化及類別的方法的運動是在index.php中

5、分析URL

      所有的請求的本質者是一個URL,都請求提Application,如果想讓Application能夠準確知道用戶的請求,要由哪一個類別文件的哪一個方法處理,那麼網站佔所有的URL的設定要有一定的規則,類別檔名也要有一定的規則:

l  URL的規則:

      http://localhost/index.php?module=類別名稱&action=類別中的方法名稱

l  類別的命名規則:

      如果是控制器類別:

            類別名稱為Controller       檔案名稱:      類別名稱為Controller.class.php

      如果是模式類別:

            類別名稱Model             檔案名稱:     類名Model.class.php

 

 

6、分發請求

(本質是動態實例化控制器,呼叫控制器的方法)

 

7、開起session

注意:所有的方法都要在單一出口存取

總結:

l  所有的php檔案的運作都在index.php檔案中。

l  application只處理控制器(controller)檔案

l  controller控制器檔案處理model模型檔案

l  application之所以能夠將根據使用者的請求,準確的呼叫類別中的方法,完全依賴我們定義的url的規則與類別的命名規則。

應用命名空間:

      命名空間的命名的規則,是以檔案所在的目錄名稱為命名空間名稱。

      如果涉及空間,那麼一定要考慮到類別名稱前會有空間名稱。

8、效果顯示

當存取網址的時候會進行預設的路由轉送:

 

 進行其它控制器的方法訪問,透過url

補充:pathinfo模式可以透過$_SERVER['PATH_INFO'];

大致就是這樣,其它一些等以後我有空再補充,我還有很多需要學習的。

座右銘:人生就是不斷在學習,再學習。

 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn