1. 程式人生 > >自己用php編寫框架原理

自己用php編寫框架原理

單一入口檔案:

<?php
//載入核心啟動類
include "framework/core/Framework.class.php";
// $app = new Framework();
// $app->run();
Framework::run();
// echo getcwd();

2、在載入的檔案中定義路由分析:

<?php
//核心啟動類
class Framework {
//run方法
public static function run(){
// echo "hello,world!";
self::init();
self::autoload();
self::dispatch();
}


//初始化方法
private static function init(){
//路徑的常量
define("DS", DIRECTORY_SEPARATOR);
define("ROOT", getcwd() . DS); //根路徑
define("APP_PATH", ROOT . "application" . DS);
define("FRAMEWORK_PATH",ROOT . "framework" .DS);
define("PUBLIC_PATH", ROOT . "public" .DS);
define("CONFIG_PATH", APP_PATH . "config" .DS);
define("CONTROLLER_PATH", APP_PATH . "controllers" .DS);
define("MODEL_PATH", APP_PATH . "models" .DS);
define("VIEW_PATH", APP_PATH . "views" .DS);
define("CORE_PATH", FRAMEWORK_PATH . "core" .DS);
define("DB_PATH", FRAMEWORK_PATH . "databases" .DS);
define("LIB_PATH", FRAMEWORK_PATH . "libraries" .DS);
define("HELPER_PATH", FRAMEWORK_PATH . "helpers" .DS);
define("UPLOAD_PATH", PUBLIC_PATH . "uploads" .DS);
//index.php?p=admin&c=goods&a=add--後臺的GoodsController中的addAction
define("PLATFORM", isset($_GET['p']) ? $_GET['p'] : "home" );
define("CONTROLLER", isset($_GET['c']) ? ucfirst($_GET['c']) : "Index" );
define("ACTION", isset($_GET['a']) ? $_GET['a'] : "index" );
define("CUR_CONTROLLER_PATH", CONTROLLER_PATH . PLATFORM . DS );
define("CUR_VIEW_PATH", VIEW_PATH . PLATFORM . DS);
//載入核心類
include CORE_PATH . "Controller.class.php";
include CORE_PATH . "Model.class.php";
include DB_PATH . "Mysql.class.php";
//載入配置檔案
$GLOBALS['config'] = include CONFIG_PATH. "config.php";


//開啟session
session_start();
}


//路由分發,說白了,例項化物件呼叫方法
//index.php?p=admin&c=goods&a=add--後臺的GoodsController中的addAction
private static function dispatch(){
$controller_name = CONTROLLER . "Controller";
$action_name = ACTION . "Action";
//例項化物件
$controller = new $controller_name();
//呼叫方法
$controller->$action_name();
}


//自動載入
//此處,只加載application中的controller和model
private static function autoload(){
// spl_autoload_register(array(__CLASS__,'load'));
spl_autoload_register('self::load');


}


//完成指定類的載入
//只加載application中的controller和model,如GoodsController,BrandModel
public static function load($classname){
if (substr($classname, -10) == 'Controller') {
//控制器
include CUR_CONTROLLER_PATH . "{$classname}.class.php";
} elseif (substr($classname, -5) == 'Model') {
//模型
include MODEL_PATH . "{$classname}.class.php";
} else {
//暫略
}
}

}

3、轉到指定controller:

<?php
//核心控制器
class Controller {
//提示資訊並跳轉
public function jump($url,$message,$wait = 3){
if ($wait == 0) {
header("Location:$url");
} else {
include CUR_VIEW_PATH . "message.html";
}
//一定要退出
exit; //die
}


//載入工具類
public function library($lib){
include LIB_PATH . "{$lib}.class.php";
}


//載入輔助函式檔案
public function helper($helper){
include HELPER_PATH . "{$helper}.php";
}
}

相關推薦

自己php編寫框架原理

單一入口檔案:<?php//載入核心啟動類include "framework/core/Framework.class.php";// $app = new Framework();// $app->run();Framework::run();// echo

編寫自己PHP MVC框架

1 什麼是MVC MVC模式(Model-View-Controller)是軟體工程中的一種軟體架構模式。 MVC把軟體系統分為三個基本部分:模型(Model)、檢視(View)和控制器(Controller)。 PHP中MVC模式也稱Web MVC,從上世紀7

PHP 編寫支援高併發的網站,需要做什麼處理?

php是一個語言工具,由php來把apache/nginx/memcache/redis/mysql/httpds等工具組合到一起,根據具體的業務需求,選取不同的系統架構模型;高併發其實考驗的是系統的架構 1. 資料的讀寫層 高併發更多考驗的是資料的讀寫,最終考驗的是根據具體的業務需求進行系統的架構;哪些資料

php編寫一個以太坊支付系統

當我第一次考慮通過加密貨幣實施支付時,我查看了像Stripe這樣的可用解決方案。我覺得Stripe的問題在於,它只允許使用美國商家帳戶進行比特幣支付,所以這對我來說不是一個選擇。在以太坊世界,它看起來更糟糕。有一些較新的服務,但他們都想要分享蛋糕。 那麼從頭開

1小時內打造你自己PHP MVC框架

簡介 MVC框架在現在的開發中相當流行,不論你使用的是JAVA,C#,PHP或者IOS,你肯定都會選擇一款框架。雖然不能保證100%的開發語言都會使用框架,但是在PHP社群當中擁有最多數量的MVC框架。今天你或許還在使用Zend,明天你換了另一個專案也許就會轉投

構建自己PHP框架--構建緩存組件2

oss ash oiv ria auto ports usb xlsx 自己的 Java%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E6%97%A5%E5%B8%B8%E2%80%94%E2%80%94%20%E3%80%8A%E7%BC%96

使用php下載的文件打不開,自己著沒問題,客戶就不行?

erl 設置 文件頭部 ati 方便 問題 操作系統 下載 為我 1 現象:   開發的時候用的好好的文件下載功能,部署到客戶那邊就不好使了,幾乎所有從服務器下載下來的文件都不能打開。   比較了上傳前的文件、上傳後服務器端的文件、下載後本機的文件,發現同一個文件,上傳

搭建自己php框架-----------------day1

公司 index.php 重定向 今天開始 訪問 log gogo post 閱讀 一直想寫一個自己的框架,但是不知道從何處下手,也用過composer構建過自己的框架,感覺基礎不是太好,一直依賴各種類庫和插件,框架寫出來感覺就是一個類庫的集合, 公司現在的框架就是模仿CI

利用 Composer 一步一步構建自己PHP 框架(一)

highlight odi yii 2 org lar getc group bsp 空間 “一個時代結束了,另一個時代開始了。” Framework Interoperability Group(框架可互用性小組),簡稱 FIG,成立於 2009 年。FIG 最初由幾位知

利用 Composer 完善自己PHP 框架(二)

pass 簡易 cte 郵件接收 ces api cep home ase 回顧 上一篇文章中,我們手工建造了一個簡易的視圖加載器,順便引入了錯誤處理包,讓我們的 MFFC 框架在 M、V、C 三個方面都達到了“好用”的水平。View 是一個可插拔組件,在本篇文章中我們要創

flask編寫自己的博客(2)

flask python web 本文對blog項目的文件結構進行簡單說明app ---> 程序主目錄api-->測試中的apiauth -->登錄認證文件main-->主入口文件static--> 靜態文件template-->html 模板文件migrati

從零開始寫自己PHP框架系列教程(二)[App.php]

porting col config exce tro efault fig 默認 clas 從這一個文件開始以後加載的均以類加載,請註意命名空間和所在文件的路徑 APP.php的這個類所在路徑:根目錄\framework\App.php 直接上代碼 namespace

寫一個屬於自己PHP的MVC框架(二)

第一篇文章已經把所需的目錄搭建好了,接下來的工作就是寫一些程式碼了 用編輯器開啟public/index.php檔案,寫上下面的程式碼 <?php define(DS, DIRECTORY_SEPARATOR); define(ROOT, dirna

寫一個屬於自己PHP的MVC框架(一)

最近想做個PHP的個人部落格作為學習用,但是發現儘管把PHP函式用得很熟悉了,按照常規的辦法,寫一個頁面處理一個請求,僅僅一個部落格就可能有很多個頁面,而且php程式碼和html程式碼都結合的非常緊密,如果想要實現更換面板的功能,就顯得非常無力。在網上找了好多framework框架,但似乎又要開始學

自己動手寫PHP-MVC框架(一)

自己動手模仿寫一個php的框架,首先是要明白原理,然後寫的話思路就比較清晰。 當前應用的基本組成是有一堆的資料夾和一個index的檔案組成         |-Conf       &n

徒手 Docker 構建自己PHP 開發環境

1. 前言 1.1 為什麼要用 Docker ?

一個Python編寫的股票資料(滬深)爬蟲和選股策略測試框架

一個股票資料(滬深)爬蟲和選股策略測試框架,資料基於雅虎YQL和新浪財經。 根據選定的日期範圍抓取所有滬深兩市股票的行情資料。 根據指定的選股策略和指定的日期進行選股測試。 計算選股測試實際結果(包括與滬深300指數比較)。 儲存資料到JSON檔案、CS

Java編寫自己的簡單HTTP伺服器

HTTP是個大協議,完整功能的HTTP伺服器必須響應資源請求,將URL轉換為本地系統的資源名。響應各種形式的HTTP請求(GET、POST等)。處理不存在的檔案請求,返回各種形式的狀態碼,解析MIME型別等。但許多特定功能的HTTP伺服器並不需要所有這些功能。例如,很多網站只

如何編寫一個自己的校驗框架

引數校驗是一個健壯的程式所必要的,那麼如何將引數校驗做到簡單,直觀。 假設有一個 User 物件,我們需要對 使用者名稱密碼 進行非null校驗 public class User { private String unam

Java編寫自己的機器人 Robot類的應用

很多時候,我們希望能夠實現自動測試,自動演示功能,或者是其它的一些滑鼠和鍵盤控制的應用(比如幫人點選廣告賺利潤等)。出於這樣的目的,自從JDK1.3開始,它就為我們提供了一個用來產生本機輸入事件的機器人類 — java.awt.Robot.    下面我來詳細介紹Rob