mvc(1)

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


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

入口文件

入口文件的内容一般包括如下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的参数部分

<?php
namespace 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';
		}
	}
}

未完待续


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值