php之mvc(单一入口)

代码目录

 

 

 代码下载:

https://github.com/lpx20181019/php_advanced/tree/master/single_entry

代码框架图

 

 

 

代码调用流程图

 

 

 

index.php

header('Content-Type:text/html; charset=utf8');
require './framework/framework.class.php';
$app = new framework();
$app->runApp();

入口文件不需要手动引入其他文件,而交给框架类,让他去引入需要引入的文件。

framework类

<?php
/**
 * 框架基础类
 */
class framework{
    public function runApp(){
        $this->loadConfig();        //加载配置
        $this->registerAutoLoad();  //注册自动加载方法
        $this->getRequestParams();  //获得请求参数
        $this->dispatch();          //请求分发
    }
    /**
     * 注册自动加载方法
     */
    private function registerAutoLoad(){
        spl_autoload_register(array($this,'user_autoload'));
    }
    /**
     * 自动加载方法
     * $param $class_name string 类名
     */
    public function user_autoload($class_name){
        //定义基础类列表
        $base_classes = array(
            //类名 => 所在位置    
            'model'            => './framework/model.class.php',
            'MySQLPDO'        => './framework/MySQLPDO.class.php',
        );
        //依次判断 基础类、模型类、控制器类
        if (isset($base_classes[$class_name])){
            require $base_classes[$class_name];
        }elseif (substr($class_name,-5) == 'Model'){
            require './application/'.PLATFORM."/model/{$class_name}.class.php";
        }elseif (substr($class_name, -10) == 'Controller'){
            require './application/'.PLATFORM."/controller/{$class_name}.class.php";
        }
    }
    /**
     * 载入配置文件
     */
    private function loadConfig(){
        //使用全局变量保存配置
        $GLOBALS['config'] = require './application/config/app.conf.php';
    }
    /**
     * 获取请求参数,p=平台 c=控制器 a=方法
     */
    private function getRequestParams(){
        //当前平台
        define('PLATFORM', isset($_GET['p']) ? $_GET['p'] : $GLOBALS['config']['app']['default_platform']);
        //得到当前控制器名
        define('CONTROLLER', isset($_GET['c']) ? $_GET['c'] : $GLOBALS['config'][PLATFORM]['default_controller']);
        //当前方法名
        define('ACTION', isset($_GET['a']) ? $_GET['a'] : $GLOBALS['config'][PLATFORM]['default_action']);
    }
    /**
     * 请求分发
     */
    private function dispatch(){
        //实例化控制器
        $controller_name = CONTROLLER.'Controller';
        $controller = new $controller_name;
        //调用当前方法
        $action_name = ACTION . 'Action';
        $controller->$action_name();
    }
}
$GLOBALS['config']是一个自动载入配置文件(包括数据库信息)的变量,在基础模型类里填入数据库信息时可以直接通过$GLOBALS['config']['db']['']的形式写入数据库的信息。

实现效果图(url的变化和不使用框架类的一样):

posted @ 2020-01-01 14:53  翱翔的猴子  阅读(357)  评论(0编辑  收藏  举报