目录结构:

    

发生改动的类代码:

    新增类: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. NodeJS框架一览

    NodeJS 框架一览 Express 当你使用Node.js构建web应用程序时, Express通常被视为事实上的Web服务器.它的哲学(一个可以使用中间件包扩展的简约核心)是大多数Node.js ...

  2. springboot的配置文件说明

    1.以servlet的方式启动SpringBoot 正常情况下要复制代码到tomcat去启动,但springboot内置tomcat了,配置好就可以直接run方法直接运行. 2.直接run运行

  3. Java线程——线程习题(一)子线程执行10次后,主线程再运行5次,这样交替执行三遍

    题目:子线程执行10次后,主线程再运行5次,这样交替执行三遍 代码如下: package com.itheima.gan; /** * 子线程执行10次后,主线程再运行5次,这样交替执行三遍 * @a ...

  4. spring学习之依赖注入DI与控制反转IOC

    一 Ioc基础 1.什么是Ioc? Ioc(Inversion of Control)既控制反转,Ioc不是一种技术,而是一种思想,在Java开发中意味着将设计好的对象交给容器来进行控制,并不是像传统 ...

  5. nginx中server块的匹配顺序

    客户端发出一个http请求时,nginx收到后会取出header头中的host,与nginx.conf中每个server的server_name进行匹配,以此决定到底由哪一个server块来处理这个请 ...

  6. Maven--Maven 安装最佳实践

    1.设置 MAVEN_OPTS 环境变量 运行 mvn 命令实际上是执行了 Java 命令,既然是运行 Java,那么运行 Java 命令可用的参数当然也应该在运行 mvn 命令时使用.这个时候,MA ...

  7. zookeeper注册中心和客户端

    1.zookeeper和eureka区别 zookeeper向client进行ping操作,如果不通,就删除client节点 eureka自我保护机制是client向注册中心发送心跳包,如果一定时间内 ...

  8. 输入一段汉字可以获得首字母简拼的java代码

    package com.zl; import java.io.UnsupportedEncodingException; public class Test12 { public static voi ...

  9. Android音视频处理之基于MediaCodec合并音视频

    Android提供了一个MediaExtractor类,可以用来分离容器中的视频track和音频track,下面的例子展示了使用MediaExtractor和MediaMuxer来实现视频的换音: p ...

  10. NSPredicate 应用

    //查询单词里面包含“ang”的字符串 NSArray *array = [[NSArray alloc]initWithObjects:@"beijing",@"sha ...