目录结构:

    

发生改动的类代码:

    新增类:Framework.class.php

 <?php
/**
* Created by PhpStorm.
* User: Interact
* Date: 2017/8/21
* Time: 16:01
*/
class Framework{
/**
* 入口
*/
public static function run() {
//声明路径常量
static::_initPathConst();
//确定分发参数
static::_initDispatchParam();
// 当前平台相关的路径常量
static::_initPlatformPathConst();
// 注册自动加载
self::_initAutoload();
// 请求分发
static::_dispatch();
}
/**
* 声明路径常量
*/
private static function _initPathConst() {
//目录基础常量的定义
//目录地址常量
define('ROOT_PATH',getcwd().'/');
define('APPLICATION_PATH',ROOT_PATH.'application'.'/');
define('FRAMEWORK_PATH',ROOT_PATH.'framework'.'/');
define('TEST_PATH',APPLICATION_PATH.'test'.'/');
define('CONTROLLER_PATH',TEST_PATH.'controller'.'/');
define('MODEL_PATH',TEST_PATH.'model'.'/');
define('VIEW_PATH',TEST_PATH.'view'.'/');
define('TOOL_PATH',FRAMEWORK_PATH.'tool'.'/');
}
/**
* 初始化分发参数
*/
private static function _initDispatchParam() {
// 确定分发参数
// 平台
//确定分发参数
//动作
define('CONTROLLER',isset($_GET['c'])?$_GET['c']:'zixunC');
define('ACTION',isset($_GET['a'])?$_GET['a']:'show');
define("PLATFORM",isset($_GET['p'])?$_GET['p']:'test');
}
/**
* 声明当前平台路径常量
*/
private static function _initPlatformPathConst() {
//当前平台相关的路径常量
define('CURRENT_CONTROLLER_PATH', APPLICATION_PATH . PLATFORM . '/controller/');
define('CURRENT_MODEL_PATH', APPLICATION_PATH . PLATFORM . '/model/');
define('CURRENT_VIEW_PATH', APPLICATION_PATH . PLATFORM . '/view/');
}
/**
* 自动加载方法
*/
public static function userautoload($class_name){ // var_dump($class_name);
//先处理确定的(框架中的核心类)
// 类名与类文件映射数组
$framework_class_list = array(
// '类名' => '类文件地址'
'Controller' => FRAMEWORK_PATH.'Controller.php',
'Model' => FRAMEWORK_PATH.'Model.class.php',
'Factory' => FRAMEWORK_PATH.'Factory.class.php',
'MySQLDB' => FRAMEWORK_PATH.'MySQLDB.class.php',
'SessionDB'=>TOOL_PATH.'SessionDB.class.php',
) ;
// echo "走没走";
//判断是否为核心类
if (isset($framework_class_list[$class_name])) {
//是核心类
require $framework_class_list[$class_name];
}
//判断是否为可增加(控制器类,模型类)
//控制器类,截取后是个字符,匹配Controller
elseif (substr($class_name, -) == 'C') {
// 控制器类, 当前平台下controller目录
require APPLICATION_PATH . PLATFORM . '/controller/' . $class_name . '.controller.class.php';
}
//模型类,截取后5个字符,匹配Model
elseif (substr($class_name, -) == 'Model') {
// 模型类,当前平台下model目录
require APPLICATION_PATH . PLATFORM . '/model/' . $class_name . '.class.php';
} }
/**
* 注册自动加载
*/
private static function _initAutoload() {
spl_autoload_register(array(__CLASS__, 'userAutoload'));
}
/**
* 分发请求
*/
private static function _dispatch() {
require APPLICATION_PATH.PLATFORM.'/controller/'.CONTROLLER.'.controller.class.php';
$controlelr_name=CONTROLLER;
$controller=new $controlelr_name();
$action_name=ACTION;
$controller->$action_name();
}
}

  index.php代码展示:

  

  require './framework/Framework.class.php';
Framework::run();

结果展示:

  

17)将index.php中的代码放到Framework中封装起来的更多相关文章

  1. java 连接接数据库 中的代码 放到配置文件中

    1.DButil.java package com.jobproject.util; import java.sql.Connection;import java.sql.DriverManager; ...

  2. Hibernate查询之SQL查询,查询结果用new新对象的方式接受,hql查询,通过SQL查询的结果返回到一个实体中,查询不同表中内容,并将查到的不同表中的内容放到List中

     package com.ucap.netcheck.dao.impl; import java.util.ArrayList;import java.util.List; import org. ...

  3. 如何在IOS开发中在自己的framework中添加.bunble文件

    今天就跟大家介绍一下有关,如何在IOS开发中在自己的framework中添加.bunble文件,该文章我已经在IOS教程网(http://ios.662p.com)发布过来,个人觉得还是对大家有帮助的 ...

  4. 在Myeclipse中提交代码到GitHub中

    这需要借助插件Egit,首先就是先下载该插件了,可以再eclipse中下载,也可以在外面下载,下载就不说了.下载地址git://github.com/houyongchao/plugin-Egit.g ...

  5. 第二十二篇:在SOUI中使用代码向窗口中插入子窗口

    使用SOUI开发客户端UI程序,通常也推荐使用XML代码来创建窗口,这样创建的窗口使用方便,当窗口大小改变时,内部的子窗口也更容易协同变化. 但是最近不断有网友咨询如何使用代码来创建SOUI子窗口,特 ...

  6. IDEA中Java代码存入DB中为乱码

    有一种可能是编译后出现的乱码,可以在Setting的Java compiler中加如下 -encoding UTF-8

  7. idea中maven项目放到包中的mapper的xml文件不发布的问题

    今天重新一下mybatis的基础,然后一直报错,提示的是 result map 找不到com.zm.model.User对象可是看 mapper的写法没问题.找了半天才发现 是mapper没扫描到 解 ...

  8. 将汉字取模软件中的汉字放到keil5中显示

    最近因为要使用STM32做毕业设计,需要用LCD显示中文,STM32开发板用的是原子的战舰STM32开发板,给的LCD显示例程里貌似没有中文显示,那么需要自己去编写中文显示程序. 软件编写对我来说并不 ...

  9. js放到head中失效的原因与解决方法

    1.今天写js碰到一个奇怪的问题,写好的js放到body里面执行,但是放到head中没有任何效果,为什么导致这种原因呢? 看失效代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

随机推荐

  1. Spring Data JPA简单查询接口方法速查

    下表针对于简单查询,即JpaRepository接口(继承了CrudRepository接口.PagingAndSortingRepository接口)中的可访问方法进行整理.(1)先按照功能进行分类 ...

  2. 通过geopandas.sjoin()函数按多边形范围分割点

    最近有一批点和多变型的数据,需要将点按照多边形的区域进行分割. 经过若干尝试,终于通过geopandas的sjoin函数得以实现. 这里首先感谢博主“张da统帅”的分享,使得本人获得该实现方法的灵感, ...

  3. MQL4编程—值传递和引用传递

    定义 简单的说就是给一个变量或者对象取一个别名(引用和被引用的共享存储单元,要用修饰符&). 引用的用法 在MQL4中通过调试只接受引用作为函数参数的用法,在函数参数传递过程中,有两种传递方式 ...

  4. 安装使用离线版本的维基百科(Wikipedia)

    1 相关背景 平常大家在上网查询一些基本概念的时候常常会参考维基百科上面的资料,但是由于方校长研制的GFW(长城防火墙系统)强大的屏蔽功能,好多链接打开以后,不出意外会出现著名的“404NOT FOU ...

  5. 17.3.12----math模块

    1----math模块提供很多的数学运算功能: math.pi   圆周率 math.e    那个自然常熟就是e^x,的这个e math.ceil(i)  对i向上取整 math.floor(i) ...

  6. [HEOI2013]ALO(可持久化Trie+链表)

    你永远不会相信一个快AFO的选手不会可持久化Trie. 其实异或粽子那题可以用可持久化Trie做,不过我还是没用,用的一般的Trie(其实可持久化是多此一举),于是到现在还是不会可持久化Trie. 这 ...

  7. swoole使用异步redis

    1.lnmp安装redis拓展 wget http://download.redis.io/releases/redis-4.0.9.tar.gz chmod 755 redis-4.0.9.tar. ...

  8. POJ 2796 Feel Good 【单调栈】

    传送门:http://poj.org/problem?id=2796 题意:给你一串数字,需要你求出(某个子区间乘以这段区间中的最小值)所得到的最大值 例子: 6 3 1 6 4 5 2 当L=3,R ...

  9. Linux分区挂载

    Liunx采用树形的文件管理系统,也就是在Linux系统中,可以说已经没有分区的概念了.分区在Linux和其他设备一样都只是一个文件.要使用一个分区必须把它加载到文件系统中.这可能难于理解,继续往下看 ...

  10. UVa202

    刚刚开始写的适合感觉是转换成字符然后开始遍历一遍,后面发现各种不行,就回去看了看题目,重新构思,写了好久还是WA,最后只能看下大神的操作(我太菜了). 先简单梳理下题目意思:首先给出两个数,然后这两个 ...