<?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. 【Java 基础篇】【第四课】初识类

    看看Java中如何定义一个类,然后用来调用的,这个比较简单,直接看代码吧. 我发现的类和C++不一样的地方: 1.Java中类定义大括号后没有分号: 2.好像没有 public.private等关键字 ...

  2. To do

    小事{ android values public.xml 树.图的所有遍历方式和优劣 } 大事{ 通读android所有官网文档. android多dex多res开发框架. java AOT(and ...

  3. python和pywin32实现窗口查找、遍历和点击

    Pywin32是一个Python库,为python提供访问Windows API的扩展,提供了齐全的windows常量.接口.线程以及COM机制等等. 1.通过类名和标题查找窗口句柄,并获得窗口位置和 ...

  4. PresentViewController切换界面(一些系统自带的页面切换动画)

    视图切换,没有NavigationController的情况下,一般会使用presentViewController来切换视图并携带切换时的动画, 其中切换方法如下: – presentViewCon ...

  5. sqlserver多表连接更新

    一.MS SQL Server 多表关联更新 sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来.虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据 ...

  6. gpt

    gpt 这里sdb是大于2T的那个VD,具体到您的机器,可以先在parted命令中先用list命令列出磁盘,然后用mklabel gpt来转换,具体如下: (parted) select /dev/s ...

  7. AWK高级编程 转载

    AWK高级编程 转载 转载自:http://blog.csdn.net/wzhwho/article/details/5513791 1. 程序元素 一个awk 程序是一对以模式(pattern) 与 ...

  8. Android 使用PullToRefreshExpandableListView不能setAdapter的问题

    private PullToRefreshExpandableListView lv; lv = (PullToRefreshExpandableListView) findViewById(R.id ...

  9. 7z usecaes

    1. Archive without compressing 7z a -t7z -mx=0 OutputFilename InputFilename Descryption: a: command, ...

  10. Flume-ng+Kafka+storm的学习笔记

    Flume-ng Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume的文档可以看http://flume.apache.org/FlumeUserGuide.html ...