• 框架类


    分析下目前的入口文件,index.php的特点;

    1.实现的功能比较多,代码也比较多

    2.不符合面向对象编程风格(还是面向对象)

     

    解决方法:

     将原来的入口文件的功能,放到一个专门的类中来完成,而入口文件的各个功能,由该类的各个

    方法来实现,这个类一般也叫做框架初始化类,也叫框架类

    第一步:在Frame目录下创建 Framework.class.php 框架类

    <?php
    //框架初始化类
    class Framework
    {
        public static function run(){

      } }

    第二步:项目引入初始化框架类

    <?php 
        include './frame/Framework.class.php';
      //调用run方法 Framework
    ::run();

    Framework框架类

    <?php 
    class Framework
    {
        /**
         * 项目的入口文件
         */
        public static function run(){
            //1、定义基础常量
            self::initDir();
            //2、确定分发参数
            self::initFenFaParam();
            //3、定义当前平台相关的目录常量
            self::initCurrentConst();
            //4、自动加载类
            spl_autoload_register('self::autoLoad');
            // self::initAutoLoad();   也可以使用这个,在类里面在定义一个函数initAutoLoad( spl_autoload_register( 自动函数方法));
            //5、请求分发
            self::initFenFa();
        }
        /**
         * 基本目录常量
         */
        private static function initDir(){
            //定义目录
            define('ROOT_DIR',str_replace('\','/',getcwd().'/'));
            //定义app目录
            define("APP_DIR",ROOT_DIR."app/");
            //定义frame目录
            define('FRAME_DIR',ROOT_DIR."frame/");
        }
        /**
         * 获取分发参数 p c a
         */
        private static function  initFenFaParam(){
            //获取平台platfrom p参数
            define('PLATFORM',isset($_GET['p']) ? $_GET['p'] : 'test');
            //获取分发参数c
            define('CONTROL',isset($_GET['c']) ? $_GET['c'] : 'Mybank');
            //获取分发参数a
            define('ACTION',isset($_GET['a']) ? $_GET['a'] : 'show' );
        }
        /**
         * 初始化当前平台的目录常量
         */
        private static function initCurrentConst(){
            //定义当前平台下Controller、Model、View目录
            define('CURRENT_CON_DIR',APP_DIR.PLATFORM.'/Controller/');
            define('CURRENT_MODEL_DIR',APP_DIR.PLATFORM.'/Model/');
            define('CURRENT_VIEW_DIR',APP_DIR.PLATFORM.'/View/');
        }
        /**
         * 自动类加载函数
         */
        private static function autoLoad($class_name){
            $frame_class=array(
                "MyPDO" => FRAME_DIR."{$class_name}.class.php",
                "Model" => FRAME_DIR."{$class_name}.class.php",
                "Factory" => FRAME_DIR."{$class_name}.class.php",
                "Controller" => FRAME_DIR."{$class_name}.class.php",
                "Framework" => FRAME_DIR."{$class_name}.class.php"
            );
            if(isset($frame_class[$class_name])){
                include $frame_class[$class_name];
            }elseif(substr($class_name,-5)=="Model"){
                include CURRENT_MODEL_DIR."{$class_name}.class.php";
            }elseif(substr($class_name,-10)=="Controller"){
                include CURRENT_CON_DIR."{$class_name}.class.php";
            }
        }
    
        /**
         * 
         * 请求分发操作
         */
        private static function initFenFa(){
            //确认名字
            $controller_name=CONTROL.'Controller';
            $action_name=ACTION.'ACTION';
            //请求分发
            $ban= new $controller_name();
            $ban->$action_name();
        }
    
        /**
         * 自动加载注册,用这个也可以
         */
        // private static function initAutoLoad(){
        //     spl_autoload_register('self::autoLoad');
        // }
        
    }

    index.php 程序入口

    <?php 
        include './frame/Framework.class.php';
        Framework::run();

  • 相关阅读:
    Python流程控制
    Python 迭代器和列表解析
    Python 文件对象
    TF-IDF介绍
    hexo博客更换主题
    学习笔记—MapReduce
    Mac下Anaconda的安装和使用
    Flume的介绍和简单操作
    hexo+github搭建个人博客
    Hbase的安装和基本使用
  • 原文地址:https://www.cnblogs.com/xiaowie/p/14335185.html
Copyright © 2020-2023  润新知