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个分类的奖 ...
随机推荐
- Vue.js 之 过渡动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 函数
ASCII(s) 返回字符串 s 的第一个字符的 ASCII 码. SELECT ASCII(CustomerName) AS NumCodeOfFirstChar FROM Customers; C ...
- awk 中 RS,ORS,FS,OFS 区别与联系
一,RS与ORS 1,RS是记录分隔符,默认的分隔符是\n,具体用法看下 [root@krlcgcms01 mytest]# cat test1 //测试文件 111 222 333 444 ...
- fatal error C1189: #error: "You must define TF_LIB_GTL_ALIGNED_CHAR_ARRAY for your compiler."
使用VS开发tensorflow的C++程序的时候,就可能会遇上这个问题,解决方法是在引入tensoflow的头文件之前添加: #define COMPILER_MSVC #define NOMINM ...
- idea代理上网
idea 代理上网 浏览器能够上网,idea无法下载jar 浏览器无法上网则配置浏览器代理 --------- start //------------------------浏览器代理完毕 idea ...
- Ansible-大保健
一.Ansible大纲 Ansible被红帽收购 1.什么是Ansible 2.Ansible特性\优点 3.Ansible基础架构 控制端\被控端\inventory\ad-hoc\playbook ...
- Python基础学习二
Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...
- 输入pip命令报错:from pip import main ImportError: cannot import name 'main'
报错信息: qly@qlyComputer:~$ pip Traceback (most recent call last): File "/usr/bin/pip", line ...
- eclipse启动tomcat出现8080,8009,8005端口被占用的问题
有时候我们在eclipse中启动项目时,Tomcat服务器会报错,显示8080.8009.8005这几个端口被占用,此时你用debug启动项目时会发现不管用,console控制台什么信息也没有,此时产 ...
- 半监督的GAN算法
ImprovedGAN $ Loss = Loss_{supervised} + \lambda * Loss_{unsupervised} $ 第二项形式与原始的GAN模型类似. 参考: Imp ...