zoukankan      html  css  js  c++  java
  • 框架类

    分析下目前的入口文件,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();

  • 相关阅读:
    利用Fiddler模拟通过Dynamics 365的OAuth 2 Client Credentials认证后调用Web API
    Dynamics CRM中的操作(action)是否是一个事务(transaction)?
    Dynamics CRM 2015/2016新特性之三十二:新增乐观并发处理
    Dynamics CRM 2015/2016新特性之三十三:有了ExecuteTransactionRequest,再也不用担心部分成功部分失败了
    提权案例(一)渗透某asp.net网站通过sql server数据库public 提权 思路分享
    windows 抓hash获取管理员密码
    第三方应用 flashfxp,filezilla提权
    第三方软件 G6ftp提权
    第三方软件 vnc提权
    第三方软件 radmin提权
  • 原文地址:https://www.cnblogs.com/xiaowie/p/14335185.html
Copyright © 2011-2022 走看看