myPHP框架 採用的是MVC 思想,應用純面向對象及項目單一入口,實現的一個自定義的框架。(自己興趣的練習) 一、項目單一入口 入口文件 myphp\index.php前臺 一個網站所有的請求都請求一個文件(入口文件)index.php\admin.php。入口很簡單,用於定義一個訪問的許可權,引入 ...
myPHP框架
採用的是MVC 思想,應用純面向對象及項目單一入口,實現的一個自定義的框架。(自己興趣的練習)
一、項目單一入口
入口文件
myphp\index.php前臺
一個網站所有的請求都請求一個文件(入口文件)index.php\admin.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:\根據你自己搭的環境的路徑\myphp\Admin 網站後臺主目錄
這裡所創的文件夾:
2、創建主機
在httpd-vhosts.conf配置文件配置
3、入口文件
在/myphp/下創建index.php文件
說明:
在入口文件定義ACCESS常量,在其後的所有的PHP文件中判斷此常量,如果有,則表示合法訪問,如果沒有,則表示非法訪問
由於引入的Application.class.php文件中使用命名空間,所以在訪問Application類時需要使用非限定訪問。Core\Application::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(); 由PHP為我們提供的可以向自動載入機制中添加多個類似於__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'];
大致就是這樣,其它一些等以後我有空再補充,我還有很多需要學習的。
座右銘:人生就是不斷地在學習,再學習。