MVC框架运行流程和目录结构

本文详细介绍了MVC框架的运行流程,从入口文件开始,包括加载函数库、启动框架、路由解析、控制器加载及业务逻辑处理。同时,也探讨了框架的目录结构,如入口文件、函数库、核心文件以及自动加载类的功能和实现方式。
摘要由CSDN通过智能技术生成

1.        框架运行流程


            用最通俗最简单的方法来解释一个MVC框架的运行流程: 通过入口文件载入函数库,加载自动加载的类,然后启动框架,启动框架后通过路由解析地址,然后将地址中解析出控制器名称,加载控制器,通过处理控制器的业务逻辑来返回结果 

2.        目录结构

        

3.        入口文件

                   定义框架目录和核心文件目录等常量,并引入核心文件。


        

<?php
/**
 * @入口文件
 * 1.定义常量
 * 2.加载函数库
 * 3.启动框架
 */
//定义常量  当前框架所在的根目录
define('SRion',realpath('./'));
//框架核心文件所在的目录
define('common',SRion.'/common');
//框架的应用目录(项目文件目录)
define('APP',SRion.'/App');

/**
 * 是否开启调试默认
 * @default  true
 */
define('DEBUG',true);
//如果开启调试模式  就打开php.ini中的错误模式
if(DEBUG){
    ini_set('display_errors','On');
}else{
    ini_set('display_errors','Off');
}

//引入函数库
include common.'/base/function.php';

//引入框架核心文件
include SRion.'/common/kernal.php';

spl_autoload_register('\common\kernal::load');
//启动框架
\common\kernal::run();



4.     函数库与框架核心文件

        函数库:在\common\base\目录中创建文件function.PHP 文件中定义我们框架中常用的一些函数或方法

            (在这里我先定义了一个输出或打印变量的函数以做示范)

<?php
function p($val){
    if(is_bool($val)){
        var_dump($val);
    }else if (is_null($val)){
        var_dump(NULL);
    }else{
    echo "<pre style='position:relative;z-index: 1000;padding: 10px;border-radius: 5px;background: #F5F5F5;border:1px solid #aaa;font-size: 14px;line-height: 10px;opacity: 0.9;font-family: Microsoft YaHei;  '>".print_r($val,true)."</pre>";
    }
}
      

        框架核心文件(又称内核或基类文件)

         在框架的common目录(框架核心目录)中创建基类文件kernal.php,请注意明明空间和代码规范,文件中的run方法是为了测试框架,即启动框架

<?php

namespace common;

class kernal
{
    public static $classMap = array();



    static function run ()
    {
        p(框架已启动);
    }   
}

4.      自动加载类

         在核心文件中定义静态方法load(),$class参数在下面会有讲解

<?php

namespace common;

class kernal
{
    public static $classMap = array();



    static function run ()
    {
        p(框架已启动);
        $route = new \common\routes();
    }


    static function load ($class)
    {

        //自动加载类库
        //new /common/route();正常情况需要这样引入   因为这个类还没有引入  所以会触发入口文件中的自动引入方法
        //$class = '\common\route.php';
        //转化成 kernal.'/common/route.php';

        p($class);
        if(isset($classMap[$class])){
            //如果已存在该文件 那么直接调用
            return true;
        }else{
            //如果没有   那么出发入口文件自动引入
            $class = str_replace('\\','/',$class);   //替换目录符号  单独的'\'视为转义  所以用两个
            $file = SRion.'/'.$class.'.php';
            if(is_file($file)){
                //引入 路由文件
                include $file;
                self::$classMap[$class] = $class;
            }else{
                return false;
            }
        }

    }
}




当我们需要的类不存在的时候,就会触发入口文件中的这个方法  来调用我们需要自动应用的类,

spl_autoload_register('\common\kernal::load');  //参数为括号内的内容  当我们使用  $class
 = new \common\kernal::load;时new 后面的类名将作为$class参数传入我们的自动加载类


持续更新中,请订阅本文以获取更新内容。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值