<?php
  //判断用户是否是通过入口文件访问
   if(!defined('ACCESS')){
     echo '非法请求';
     die;
   }
   //封装初始化类
   class Application {
    //设置字符编码
    private static function setCharset() {
        header('Content-type:text/html;charset=utf-8');
    }
    //设置系统常量
    private static function setDir() {
        define('ROOT_DIR',str_replace('\\', '/', dirname(__DIR__)));
        define('CORE_DIR',ROOT_DIR.'/Core');
        define('ACTION_DIR',ROOT_DIR.'/Action');
        define('MODEL_DIR',ROOT_DIR.'/Model');
        define('VIEW_DIR',ROOT_DIR.'/View');
        define('Config_DIR',ROOT_DIR.'/Config');
        define('PUBLIC_DIR',ROOT_DIR.'/Public');
    }
    //设置错误信息
    private static function setErrors() {
        ini_set('display_errors', 1);
        error_reporting(E_ALL);
    }
    
    //初始化配置信息
    private static function setConfig() {
        $GLOBALS['config'] = include Config_DIR.'/config.php';
    }
    
    //加载Core核心文件
    public static function loadCore($class) {
        if(is_file(CORE_DIR."/$class.class.php")) {
            include CORE_DIR."/$class.class.php";
        }
    }
    
    //加载控制器文件
    public static function loadAction($class) {
    if(is_file(ACTION_DIR."/$class.class.php")) {
            include ACTION_DIR."/$class.class.php";
        }
    }
    
    //加载模型文件
    public static function loadModel($class) {
        if(is_file(MODEL_DIR."/$class.class.php")) {
            include_once MODEL_DIR."/$class.class.php";
        }
    }
    
    //自动加载机制
    private static function setAutoLoad() {
        //通过以下方式可以将loadCore,loadAction,loadModel追加到系统__autoload函数栈中
        //当系统初始化对象时,系统会自动到以下三个函数中寻找,但是有顺序要求,先注册先使用,如在当
        //前文件中已找到,其将不会继续向下寻找
        spl_autoload_register(array('Application','loadCore'));
        spl_autoload_register(array('Application','loadAction'));
        spl_autoload_register(array('Application','loadModel'));
    }
    
    //设置session
    private static function setSession() {
        @session_start();
    }
    
    //设置url
    private static function setUrl() {
         //默认显示Index控制器下的index方法
        $module = isset($_REQUEST['m'])?$_REQUEST['m']:'Index';
        $action = isset($_REQUEST['a'])?$_REQUEST['a']:'index';
        
        //把接收到的所有参数转化为小写
        $module = strtolower($module);
        $action = strtolower($action);
        //由于命名习惯问题,我们需要将模块参数的首字母转化为大写
        $module = ucfirst($module);
        
        define('MODULE',$module);
        define('ACTION',$action);
    }
    
    //设置权限
    private static function setPrivilege() {
        //如果是提供登录表单和登录验证方法,不需要验证用户是否已登录,其他均需用户登录后才可以进行操作
        if(!(MODULE=='Privilege' && (ACTION=='login' || ACTION=='sigin' || ACTION=='captcha'))) {
            $_SESSION['user'] = 1;
            if(!isset($_SESSION['user'])) {
                header('Location:index.php');
            }
        }
    }
    
    //设置分发
    private static function setDispatch() {
        $module = MODULE.'Action';
        $action = ACTION;
        //创建对象
        $module = new $module();
        $module->$action();
    }
    
    //定义初始化方法
    public static function run() {
        //1)初始化字符集
        self::setCharset();
        //2)初始化系统路径常量
        self::setDir();
        //3 )初始化错误配置
        self::setErrors();
        //4)初始化配置信息
        self::setConfig();
        //5)自动加载
        self::setAutoLoad();
        //6)开启session
        self::setSession();
        //7)url初始化
        self::setUrl();
        //8)权限验证
        self::setPrivilege();
        //9)分发
        self::setDispatch();
    }
}
?>

封装application类的更多相关文章

  1. 微信公众号开发系列-Http请求封装基类

    HttpHelper请求封装基类,支持get请求和POS请求,方便微信开发接口交互,为后面接口交互做准备. 1.HttpHelper帮助基类 [csharp] view plaincopy using ...

  2. Http请求封装基类HttpHelper.cs

    HttpHelper请求封装基类,支持get请求和POS请求http接口交互,为后面接口交互做准备. 1.HttpHelper帮助基类 using System; using System.Colle ...

  3. [Android] Android 使用 Greendao 操作 db sqlite(2)-- 封装DaoUtils类

    继续接上文: Android 使用 Greendao 操作 db sqlite(1)-- 直接在MainActivity中调用 布局文件同上文一致,这里就不贴了. 一.封装DaoUtils类 User ...

  4. PDO 增删改查封装的类

    Selecting Data 你在mysql_*中是这样做的 <?php $result = mysql_query('SELECT * from table') or die(mysql_er ...

  5. PHPEXCEL在thinkphp中封装成类使用

    PHPEXCEL在thinkphp中封装成类使用 标签: phpexcel导出导入thinkphp -- : 435人阅读 评论() 收藏 举报 分类: php() 版权声明:本文为博主原创文章,未经 ...

  6. 适用于app.config与web.config的ConfigUtil读写工具类 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类) 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式

    适用于app.config与web.config的ConfigUtil读写工具类   之前文章:<两种读写配置文件的方案(app.config与web.config通用)>,现在重新整理一 ...

  7. 基于小程序请求接口 wx.request 封装的类 axios 请求

    基于小程序请求接口 wx.request 封装的类 axios 请求 Introduction wx.request 的配置.axios 的调用方式 源码戳我 feature 支持 wx.reques ...

  8. python封装发送邮件类

    import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart i ...

  9. SpringMVC 自动封装枚举类的方法

    springmvc默认无法自动封装枚举类,解决方法如下: 1.枚举类 public enum GoodsPromoteEnum { /** * 0 精品 */ fine("精品", ...

随机推荐

  1. CLR调试报错“Visual Studio远程调试监视器 (MSVSMON.EXE) 的 64 位版本无法调试 32 位进程或 32 位转储。请改用 32 位版本”的解决

    Win7 64位电脑上进行visual studio的数据库项目的CLR存储过程进行调试时,报错: ---------------------------Microsoft Visual Studio ...

  2. Java迭代 : Iterator和Iterable接口

    从英文意思去理解 Iterable :故名思议,实现了这个接口的集合对象支持迭代,是可迭代的.able结尾的表示 能...样,可以做.... Iterator:   在英语中or 结尾是都是表示 .. ...

  3. hadoop 2.4 伪分布式模式

    1.core-site.xml 在<configuration></configuration>中插入 <property> <name>fs.defa ...

  4. QTextCodec::makeDecoder函数,plugins需要是动态链接库

    QT中的QString内容使用Unicode作为文本编码.但是实际系统中通常采用的是其他编码,例如GBK,utf8等.为了便于兼容这些格式,QT中还设置了两个字符串类型: QCString类: C类型 ...

  5. 【Java 基础篇】【第七课】组合

    我所理解的组合就是在一个类当中又包含了另一个类的对象. 这样的方式就是组合吧: 电池是一个类,有电量 手电筒需要电池 看代码吧: // 电池类 class Battery { // 充电 public ...

  6. Java中类名与文件名的关系

    1.Java保存的文件名必须与类名一致: 2.如果文件中只有一个类,文件名必须与类名一致: 3.一个Java文件中只能有一个public类: 4.如果文件中不止一个类,文件名必须与public类名一致 ...

  7. HTML标签的改变

    /*这些都是前端面试中经常考到的内容,必须要掌握的*/ 一.新的文档类型声明(DTD) 1.HTML5的DTD声明为:<!doctype html>或者<!DOCTYPE html& ...

  8. Selenium2学习-004-WebUI自动化实战实例-002-百度登录

    此文主要通过 百度登录 功能,进行 Selenium2 的实战实例讲解.文中所附源代码于 2015-01-17 23:33 亲测通过,敬请亲们阅览.同时,您也可参考此文进行其他网站(例如 京东.易迅. ...

  9. C语言:通过返回指针的形式找出数组的最大值和最小值

    // //  main.c //  Pointer_max_min(return) // //  Created by ma c on 15/8/2. //  Copyright (c) 2015年 ...

  10. linux下利用elk+redis 搭建日志分析平台教程

    linux下利用elk+redis 搭建日志分析平台教程 http://www.alliedjeep.com/18084.htm   elk 日志分析+redis数据库可以创建一个不错的日志分析平台了 ...