• 封装application类


    <?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();
        }
    }
    ?>

  • 相关阅读:
    LeetCode Count of Range Sum
    LeetCode 158. Read N Characters Given Read4 II
    LeetCode 157. Read N Characters Given Read4
    LeetCode 317. Shortest Distance from All Buildings
    LeetCode Smallest Rectangle Enclosing Black Pixels
    LeetCode 315. Count of Smaller Numbers After Self
    LeetCode 332. Reconstruct Itinerary
    LeetCode 310. Minimum Height Trees
    LeetCode 163. Missing Ranges
    LeetCode Verify Preorder Serialization of a Binary Tree
  • 原文地址:https://www.cnblogs.com/shaohuixia/p/5427185.html
Copyright © 2020-2023  润新知