在我们自己要封装一个框架之前,我们首先要知道一般框架的运行流程如下
接下来就挨个流程给大家做详细的介绍。
入口文件
入口文件的内容一般包括如下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';
}
}
}
未完待续