<?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. PHP基础语法: echo,var_dump, 常用函数:随机数:拆分字符串:explode()、rand()、日期时间:time()、字符串转化为时间戳:strtotime()可变参数的函数:PHP里数组长度表示方法:count($attr[指数组]);字符串长度:strlen($a)

    PHP语言原理:先把代码显示在源代码中,再通过浏览器解析在网页上 a. 1.substr;  //用于输出字符串中,需要的某一部分 <?PHP $a="learn php"; ...

  2. Mongo对内嵌文档的CRUD

    { "_id" : ObjectId("5706032acd0a6194868cf53e"), "list" : { "age&q ...

  3. HBase的二级索引,以及phoenix的安装(需再做一次)

    一:HBase的二级索引 1.讲解 uid+ts 11111_20161126111111:查询某一uid的某一个时间段内的数据 查询某一时间段内所有用户的数据:按照时间 索引表 rowkey:ts+ ...

  4. HDFS API 文件读写代码演示

    一:准备工作 1.新建class类 2.开启HDFS服务 3.将配置文件拷贝进resources路径 方便了Configuration的读取配置. 二:读出HDFS文件系统中的文件到控制台 4.读出在 ...

  5. win环境下,用虚拟化工具打包Qt动态编译exe的过程(使用Enigma Virtual Box)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://goldlion.blog.51cto.com/4127613/834075 引子 ...

  6. php--yii2.0的安装

    1.php.ini中去掉php_openssl.dll前面的“;” 2.注意phpstudy中php版本使用5.4n 3.环境OK后,使用自己的域名访问下yii2.0中advanced中的requir ...

  7. Nodejs电影建站开发实例(上)

    网站环境:使用express框架.bootstrap样式.jade模板.mongoose数据库 npm insatll express -g npm insatll jada -g npm insat ...

  8. JS实现页面回到顶部效果

    [代码] <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  9. Insecure world writable dir /usr/local in PATH, mode 040777

    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin14/rbconfi ...

  10. 网页flv下载探索_1

    最近看了一个优酷视频(非优酷网站,最终地址指向优酷),用chrome开发者工具,可找到flv地址如下,简单摘录如下: http://27.221.100.104/657D4D2878C3382C781 ...