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