<?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. android 直接启动其他应用的Service

    最近在做一个小插件,没有图标没有activity,利用其他APK启动它的service. 直奔主题,插件A,安装插件的应用B. B安装A后,由于A刚被安装,没有注册广播接收器,这里不考虑AIDL.需求 ...

  2. Maven实战(七)settings.xml相关配置

    一.简介 settings.xml对于maven来说相当于全局性的配置,用于所有的项目,当Maven运行过程中的各种配置,例如pom.xml,不想绑定到一个固定的project或者要分配给用户时,我们 ...

  3. pod》error:The dependency `` is not used in any concrete target

    内容提要: podfile升级之后到最新版本,pod里的内容必须明确指出所用第三方库的target,否则会出现The dependency `` is not used in any concrete ...

  4. linux pipe

    1. 函数说明 pipe(建立管道): 1) 头文件 #include<unistd.h> 2) 定义函数: int pipe(int filedes[2]); 3) 函数说明: pipe ...

  5. Java学习-012-文件删除实例及源代码

    此文源码主要为应用 Java 创建文件的源代码.若有不足之处,敬请大神指正,不胜感激! 文件删除源代码如下: /** * @function 文件操作:删除文件.若文件存在且未被占用,则删除文件:若文 ...

  6. 打造安全的App!iOS安全系列之 HTTPS

    如何打造一个安全的App?这是每一个移动开发者必须面对的问题.在移动App开发领域,开发工程师对于安全方面的考虑普遍比较欠缺,而由于iOS平台的封闭性,遭遇到的安全问题相比于Android来说要少得多 ...

  7. myscroll

    <!DOCTYPE html> <head><meta http-equiv="Content-Type" content="text/ht ...

  8. Ball Tracking with OpenCV

    http://www.pyimagesearch.com/2015/09/14/ball-tracking-with-opencv/

  9. 通过 ec2-api / boto 调用 OpenStack 功能

    通过 ec2-api / boto 调用 OpenStack 功能 OpenStack 支持 amazon ec2 的 api,并能通过 python 库 boto 来进行调用.目前,社区在把 ec2 ...

  10. JBOSS安全配置

    1.jmx-console登录的用户名和密码设置 默认情况访问http://localhost:8080/jmx-console就可以浏览jboss的部署管理的一些信息,不需要输入用户名和密码,使用起 ...