<?php
//核心启动类
class Framework {
//定义一个run方法
public static function run(){
// echo "hello,wrold!";
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);
//获取参数p、c、a,index.php?p=admin&c=goods&a=add GoodsController中的addAction
define('PLATFORM',isset($_GET['p']) ? $_GET['p'] : "admin");
define('CONTROLLER',isset($_GET['c']) ? ucfirst($_GET['c']) : "Index");
define('ACTION',isset($_GET['a']) ? $_GET['a'] : "index");
//设置当前控制器和视图目录 CUR-- current
define("CUR_CONTROLLER_PATH", CONTROLLER_PATH . PLATFORM . DS);
define("CUR_VIEW_PATH", VIEW_PATH . PLATFORM . DS);

//载入配置文件
$GLOBALS['config'] = include CONFIG_PATH . "config.php";

//载入核心类
include CORE_PATH . "Controller.class.php";
include CORE_PATH . "Model.class.php";
include DB_PATH . "Mysql.class.php";
}

//路由方法,说白了,就是实例化对象并调用方法
//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();
}

//注册为自动加载
private static function autoload(){
// $arr = array(__CLASS__,'load');
spl_autoload_register('self::load');
}

//自动加载功能,此处我们只实现控制器和数据库模型的自动加载
//如GoodsController、 GoodsModel
private 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 {
//暂略
}
}

}

最新文章

  1. iOS开发——高级篇——远程音频、视频播放
  2. 解决MVC中JSON字符长度超出限制的异常
  3. 自己的JS框架--Amy框架。
  4. true是表示使用身份验证,否则不使用身份验证
  5. TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。
  6. [ html canvas putImageData ] canvas绘图属性 putImageData 属性讲解
  7. grep DEMO
  8. 设计模式_Decorator_装饰模式
  9. linux相关解压命令
  10. 转:你真的懂得JS吗?
  11. hdu4635(最多加多少边,使得有向图不是强连通图)
  12. SQL Server :理解DCM页
  13. C语言中的内存对齐
  14. 3D模型展示以及体积、表面积计算
  15. 新装云服务器没有iptables 文件,并且无法通过service iptables save操作
  16. Fiddler状态栏
  17. Mysql基础之 基础知识解释
  18. WordPress更新提示无法创建目录的解决方案
  19. 七、持久层框架(MyBatis)
  20. donet core 应用 部署到CentOS

热门文章

  1. Java游戏服务器搭建
  2. T3138 栈练习2 codevs
  3. 洛谷 P1503鬼子进村
  4. uiimage缩放图片大小和属性UIViewContentModeScaleAspectFit
  5. 使用NSOperationQueue简化多线程开发
  6. 普元OA平台介绍
  7. ASP.NET Core 依赖注入(构造函数注入,属性注入等)
  8. excel 分类汇总函数
  9. OC - 读歌词
  10. SolidEdge 工程图中如何控制是否显示爆炸图组装线