框架類

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

 

 

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