mvc(1)

来源:互联网 发布:sql msde 编辑:程序博客网 时间:2024/05/21 09:47

在我们自己要封装一个框架之前,我们首先要知道一般框架的运行流程如下


接下来就挨个流程给大家做详细的介绍。

入口文件

入口文件的内容一般包括如下3点

1.定义常量

2.加载函数库

3.启动框架

<?php/** * 入口文件 * 1.定义常量 * 2.加载函数库 * 3。启动框架  */  //定义常量  define('IMOOC',dirname($_SERVER['SCRIPT_FILENAME']).'/');  define('CORE',IMOOC.'/core');  define('APP',IMOOC.'/app');  define('MODULE','app');  define('DEBUG', true);  if(DEBUG){  ini_set('display_error', 'On');  }else{  ini_set('display_error','Off');  }  //加载函数库  include CORE.'/common/function.php';  //加载框架的核心文件  include CORE.'/imooc.php';<pre name="code" class="php">  spl_autoload_register('\core\imooc::load');

//启动框架 \core\imooc::run();

以上就是一个简单的入口文件的实例。


自动加载

在做类自动加载前,我们来回顾一下入口文件的

  spl_autoload_register('\core\imooc::load');
这个函数的意思是当我们所new的类不存在的时候,会触发上面函数里面的方法。

我们接下来看下core/imooc目录下的load方法所做的操作

static public function load($class){//自动加载类库if(isset($classMap[$class])){                   return true;}else{$class = str_replace('\\', '/', $class);        if(is_file(IMOOC.$class.'.php')){        //echo IMOOC.$class.'.php';             include IMOOC.$class.'.php';             self::$classMap[$class] = $class;        }else{        return false;        }    }

上面所做的操作的意思就是说如果 我们引入的类存在,则执行下一步,否则将这个类引入进来,这就完成了我们的自动加载

路由类

路由类里面主要的操作就是隐藏路由中的index.php,获取url的参数部分,返回对应的控制器和方法

先说隐藏index.php

首先我们在与入口文件同级创建一个.htaccess的文件如下

<IfModule mod_rewrite.c>    RewriteEngine On    RewriteCond %{REQUEST_FILENAME} !-d    RewriteCond %{REQUEST_FILENAME} !-f    RewriteRule ^(.*)$ index.php?/ [QSA,PT,L]</IfModule> 

这样就实现了隐藏index.php

然后是获得url的参数部分

<?phpnamespace core\lib;class route{public $ctrl;public $action;public function __construct(){if(isset($_SERVER['REQUEST_URI']) && $_SERVER['REQUEST_URI'] != '/'){//判断是否有参数    //index/index            $path = $_SERVER['REQUEST_URI'];            $patharr = explode('/', trim($path,'/'));            if(isset($patharr[0])){                $this->ctrl = $patharr[0];            }             unset($patharr[0]);            if(isset($patharr[1])){                $this->action = $patharr[1];                unset($patharr[1]);            } else {            $this->action = 'index';            }            p($patharr);            $count = count($patharr)+2;            $i = 2;            while($i < $count){                if(isset($patharr[$i+1])){                $_GET[$patharr[$i]] = $patharr[$i+1];                }                        $i = $i + 2;            }            p($_GET);            //url多余部分转换成GET  } else {$this->ctrl = 'index';$this->action = 'index';}}}

未完待续


0 0
原创粉丝点击