框架类

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章