<?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 {
//暂略
}
}

}

phpMVC框架的核心启动类定义的更多相关文章

  1. WPF核心对象模型-类图和解析

    DispatcherObject是根基类,通过继承该类,可以得到访问创建该对象的UI线程的Dispatcher对象的能力.通过Dispatcher对象,可以将代码段合并入该UI线程执行. Depend ...

  2. 手把手编写自己的PHPMVC框架

    1 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...

  3. 开源框架TLog核心原理架构解析

    前言 最近在做TLog 1.2.5版本的迭代,许多小伙伴之前也表示说很想参与开源项目的贡献.为了让项目更好更快速的迭代新特性以及本着发扬开源精神互相学习交流,很有幸招募到了很多小伙伴与我一起前行. 为 ...

  4. gene框架文档 - 路由类 gene_router

    路由类 Gene\Router 介绍 Gene\Router 是gene框架的核心类之一,本框架区别于其他常见框架的最大地方就是独特.强大.简单的路由定义等.路由强大灵活,支持回调.类方法:支持res ...

  5. 十五、struts2中的拦截器(框架功能核心)

    十五.struts2中的拦截器(框架功能核心) 1.过滤器VS拦截器 功能是一回事. 过滤器是Servlet规范中的技术,可以对请求和响应进行过滤. 拦截器是Struts2框架中的技术,实现AOP(面 ...

  6. struts2框架的核心内容

     Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Ac ...

  7. 【ABP框架系列学习】启动配置(5)

    ABP提供了在启动时配置模块的基础设施和模型. 1.配置ABP 配置ABP是在模块的PreInitialize方法中完成的,例如: public class SimpleTaskSystemModul ...

  8. spring框架 AOP核心详解

    AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Asp ...

  9. Spring框架的核心功能之AOP技术

     技术分析之Spring框架的核心功能之AOP技术 AOP的概述        1. 什么是AOP的技术?        * 在软件业,AOP为Aspect Oriented Programming的 ...

随机推荐

  1. python实现显示安装进度条

    一直很好奇那种安装进度条,或者启动程序时候显示的进度条是怎么实现的,学习了python之后,sys模块中有个方法可以实现,代码如下:   1 2 3 4 5 6     import sys,time ...

  2. 用systemtap来做系统性能分析和事件分析

    http://zhengheng.me/2015/02/11/systemtap-analy/

  3. linux下二机制文件的查看和编辑

    linux下很多命令都是二机制:/bin/下的各种命令---/bin/sh./bin/cat./bin/dmesg./bin/hostname等 如何查看这些二机制文件: xxd.hexdump 参考 ...

  4. CSS - 如何实现强制不换行、自动换行、强制换行

    来源:http://www.cnblogs.com/mcat/p/4884644.html 强制不换行 div{ white-space:nowrap; } 自动换行 div{ word-wrap: ...

  5. 空暇时候思考2(&#39;\0&#39;等价于数字0还是字符0)

    /********************************************************************** * * Copyright (c)2015,WK Stu ...

  6. vim编码方式配置的学习和思考

    哎呀呀,今天9月30号,立即就要十一长假了,心里还有点小小浮躁.工作已经基本做完,想成为技术大牛怎么能够如此浮躁.为了应付浮躁的心灵,决定写一篇小博,平静一把. 今天一个配置文件须要有中文,而且同事是 ...

  7. vue 实现 扫二维码 功能

    前段时间一直在研究,如何通过 vue 调用 相机 实现 扫一扫的功能,但是查看文档发现,需要获取 getUserMedia 的属性值,但存在兼容性问题. 退而求其次,通过 h5plus 来实现. 1. ...

  8. gameplay理解

    Camera视角:确定显示的视场及视角. Game:显示的基类.静态单例模式.但是获取方式很奇怪. Game::getInstance得到的是__gameInstance,但是__gameInstan ...

  9. 走入asp.net mvc不归路:[2]控制器概览

    asp.net mvc中最灵活的地方就是控制器,这里可以验证数据,可以跳转视图,还可以访问数据库等等.所以,我们要先从这里说起. 1 控制器就是继承了Controller的类,一般来说,类名后面都会增 ...

  10. CocoaPods安装问题

    主要步骤: sudo gem install cocoapods pod setup 验证是否安装成功: pod search SDWebImage 常见问题: 1 sudo gem install ...