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