82)PHP,基本框架类步骤
framework.class.php
基本代码展示:
<?php /**
* 框架初始化功能类
*/
class Framework {
/**
* 入口
* 里面的static和self是一样的,都是表示当前类
*/
public static function run() {
//声明路径常量
static::_initPathConst();
//确定分发参数
static::_initDispatchParam();
// 当前平台相关的路径常量
static::_initPlatformPathConst();
// 注册自动加载
static::_initAutoload(); // 请求分发
static::_dispatch();
} /**
* 声明路径常量
*/
private static function _initPathConst() {
//目录基础常量的定义
define('ROOT_PATH', getCWD() . '/');//getCWD()获得当前目录
define('APPLICTION_PATH', ROOT_PATH . 'application/');
define('FRAMEWORK_PATH', ROOT_PATH . 'framework/');
define('TOOL_PATH', FRAMEWORK_PATH . 'tool/');
}
/**
* 初始化分发参数
*/
private static function _initDispatchParam() {
// 确定分发参数
// 平台
$default_platform = 'back';
define('PLATFORM', isset($_GET['p']) ? $_GET['p'] : $default_platform);
// 控制器类
$default_controller = 'Manage';
define('CONTROLLER', isset($_GET['c']) ? $_GET['c'] : $default_controller);
// 动作
$default_action = 'index';
define('ACTION', isset($_GET['a']) ? $_GET['a'] : $default_action);
}
/**
* 声明当前平台路径常量
*/
private static function _initPlatformPathConst() {
//当前平台相关的路径常量
define('CURRENT_CONTROLLER_PATH', APPLICTION_PATH . PLATFORM . '/controller/');
define('CURRENT_MODEL_PATH', APPLICTION_PATH . PLATFORM . '/model/');
define('CURRENT_VIEW_PATH', APPLICTION_PATH . PLATFORM . '/view/');
}
/**
* 自动加载方法
*/
public static function userAutoload($class_name) {
//先处理确定的(框架中的核心类)
// 类名与类文件映射数组
$framework_class_list = array(
// '类名' => '类文件地址'
'Controller' => FRAMEWORK_PATH . 'Controller.class.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',
) ;
//判断是否为核心类
if (isset($framework_class_list[$class_name])) {
//是核心类
require $framework_class_list[$class_name];
}
//判断是否为可增加(控制器类,模型类)
//控制器类,截取后是个字符,匹配Controller
elseif (substr($class_name, -) == 'Controller') {
// 控制器类, 当前平台下controller目录
require CURRENT_CONTROLLER_PATH . $class_name . '.class.php';
}
//模型类,截取后5个字符,匹配Model
elseif (substr($class_name, -) == 'Model') {
// 模型类,当前平台下model目录
require CURRENT_MODEL_PATH . $class_name . '.class.php';
}
}
/**
* 注册自动加载
*/
private static function _initAutoload() {
spl_autoload_register(array(__CLASS__, 'userAutoload'));
}
/**
* 分发请求
*/
private static function _dispatch() {
//实例化控制器类,并调用动作方法
$controller_name = CONTROLLER . 'Controller';
//实例化
$controller = new $controller_name();//可变类
//调用方法(action动作)
//拼凑当前的方法动作名字符串
$action_name = ACTION . 'Action';
$controller->$action_name();//可变方法
}
}
82)PHP,基本框架类步骤的更多相关文章
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)
近期看老罗的视频,跟着完毕了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完毕对数据库的增删改查.当中查询这块,包含普通的查询和利用反射完毕的查询,主要包含以下几个函数接口 ...
- Thinkphp框架部署步骤
Thinkphp框架部署步骤 thinkphp框架部署起来简单,但是由于步骤较多也容易遗忘: 这是安装了集成环境后的一个www根目录结构: 然后需要在这个目录下面创建一个文件夹做项目:thinkphp ...
- spring boot 框架设计步骤
spring boot 框架设计步骤: 1.poem.xml配置 2.application.yml配置 3.entiry实体 4.realm.Myrealm extends AuthorizingR ...
- python webdriver 从无到有搭建数据驱动自动化测试框架的步骤和总结
一步一步搭建数据驱动测试框架的过程和总结 跟吴老学了搭建自动化数据驱动的框架后,我在自己练习的时候,尝试从简单的程序进行一点一点的扩展和优化,到实现这个数据驱动的框架. 先说一下搭建自动化测试框架的目 ...
- SSH框架搭建步骤总结以及Hibernate二级缓存,查询缓存
二级缓存.查询缓存 一级缓存: 默认启动,生命周期是和session同步的,session独享 二级缓存: 需要加载配置信息,生命周期是和应用服务器同步,session共享 1:在hibernate. ...
- 使用Spring框架的步骤
“好记性,不如烂笔头”.今天正式接触了Spring框架,第一次接触Spring框架感觉Spring框架简化了好多程序代码,开发效率大大提高.现在介绍使用Spring框架的步骤.(使用spring-fr ...
- Swift - 重写UIKit框架类的init初始化方法(以UITabBarController为例)
原来写了篇文章讲UITabBarController的用法,当时是从UIViewController跳转到UITabBarController页面,代码如下: 1 self.presentViewCo ...
- 2013 Visual Studio Magazine读者选择奖界面框架类获奖情况
2013 Visual Studio Magazine读者选择奖已经正式揭晓了!据了解,截至今年此奖项已经评选了21次,非常值得.NET开发人员信赖和参考.此次评选共有400多个产品角逐28个分类的奖 ...
随机推荐
- SQL基础教程(第2版)第7章 集合运算:7-2 联结(以列为单位对表进行联结)
第7章 集合运算:7-2 联结(以列为单位对表进行联结) ■联结的特定语法和过时语法 ● 联结( JOIN)就是将其他表中的列添加过来,进行“添加列”的集合运算.UNION是以行(纵向)为单位进行操作 ...
- 寒假day14
今天去医院看脸了,回来继续写论文.
- 「不会」Min25筛
大概的思路是把所有数分成质数和合数考虑 对于质数,必须找出一个很简单的完全积性函数和所求函数拟合 把所有数当做质数看待求个前缀和,然后再枚举合数的最小质因子把合数T掉 枚举到根号n,即可保证把n以内的 ...
- 洛谷 P2871 [USACO07DEC]手链Charm Bracelet && 01背包模板
题目传送门 解题思路: 一维解01背包,突然发现博客里没有01背包的板子,补上 AC代码: #include<cstdio> #include<iostream> using ...
- 计蒜客 王子救公主(DFS)
一天,蒜头君梦见自己当上了王子,但是不幸的是,自己的公主被可恶的巫婆抓走了.于是蒜头君动用全国的力量得知,自己的公主被巫婆抓进一个迷宫里面.由于全国只有蒜头君自己可以翻越迷宫外的城墙,蒜头君便自己一人 ...
- 是时候写个自己的dialog了
组件下载地址:http://pan.baidu.com/s/1pJFVfej 最近做的项目需要用到对话框,但是原生的弹出框你是知道的.如果有时间,还是自己尝试一下,也是可以的. 一个简单图 里面的输入 ...
- lower_bound()和upper_bound()用法详解
lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的. lower_bound( begin,end,num):从数组的begin位置到end ...
- ZZJ_淘淘商城项目:day01(RESTful Web Service、SVN)
淘淘商城项目是很适合初级Java程序员练习的实战项目,本次复习是另一位张老师教授的课,内容上与之前入老师版taotao商城比较有些新东西加了进来. 因此有必要记录下那些直到现在还可供参考的技术亮点分享 ...
- Java零基础学习详解
01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操作实用工具,小巧简单实用. * DBUtils ...
- pycharm、Django+node.js、vue搭建web项目
参考文章:https://www.wandouip.com/t5i35466/ 在此感谢 本篇接着上一篇:windows10使用npm安装vue.vue-cli 首先Django项目是搭建好的,就是 ...