自己用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";
}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值