第二步:搭建主框架
在ThinkPHP.php这个框架入口文件中,代码主要分成两部分,常量定义部分和入口函数调用部分。
常量定义部分定义了五个常量,分别是版本号(THINK_VERSION,当前为3.2.3.an,an表示是解析版),类文件后缀(EXT),框架目录(THINK_PATH),类库目录(LIB_PATH)和Think目录(CORE_PATH).
然后接下来就是调用入口函数部分了。
在这一部分中,先使用require,把项目文件给引用进来.CORE_PATH和EXT都是上面定义的常量。
额…对了,不要忘了现在的目录结构:
可以清楚地看到,倒数第二行引用的就是Think.class.php这个文件了。
Think.class.php这个文件的代码如下:
还记得上一步吗?现在只是把[欢迎使用ThinkPHP框架]这一行文本移动到Think类中的start中的函数来。
在看一下ThinkPHP.php主文件的最后一行:
Think\Think::start();
这里没有实例化类Think便可以调用Think类中函数,主要是因为start这个函数是一个静态的函数(static),因此可以通过Think::start()引用。
而Think::start()前面还有一个Think,这里的Think是说明,要引用名字空间为Think中的内容。
名字空间Think在Think.class.php文件的第一行中定义:
namespaceThink;
如果去掉这一行,那么调用start()这个函数,就可以直接使用Think::start()了,而不用使用Think\Think::start()。
好了,第二步今天就到这里,作为结尾,再来看一下常量定义中的:
defined('THINK_PATH') or define('THINK_PATH', __DIR__.'/');
这里定义了主框架的目录,因此,就算我们的主框架目录名不是ThinkPHP也不会影响到框架的功能。因此,在项目上线的时候,为了安全着想,一般会将think框架的目录改名。而我们可以看到,想CORE_PATH和LIB_PATH这两个常量,也是基于THINK_PATH这个常量的。
因此,说start()是主框架的入口函数,那么THINK_PATH这个便是所有路径常量的基石。
根据上文提到的单入口文件的作用,我们所需要在单入口文件中所做的事情无非就两种:
1、进行路径解析,启动相应的控制器。
2、加载应用的配置文件
基于这上面这两点,我们就可以做出一个简单的MVC框架出来。
index.php
<?php
header('content-type:text/html;charset=utf8');
//路由解析
$route=$_SERVER['PATH_INFO'];
if(empty($route)){
define('MODULE', 'home');
define('CONTROLLER', 'index');
define('ACTION', 'index');
}else{
$list[]=explode('/',$route);
define('MODULE', empty($list[1])?'home':$list[1]);
define('CONTROLLER', empty($list[2])?'index':$list[2]);
define('ACTION', empty($list[3])?'index':$list[3]);
}
//启动控制器
$filename='./app/'.MODULE.'/controller/'.CONTROLLER.'.class.php';
if(!is_file($filename)){
exit('控制器不存在');
}
require $filename;
$con=CONTROLLER.'Controller';
$act=ACTION;
$controller=new $con();
$controller->$act();app/home/controller/index.class.php
<?php
class indexController{
public function index(){
echo 'hello world';
}
}
这样,一个简单的mvc框架就已经搭建好了。可以看到这里的view和model并没有出现,这是因为通常是controller从model中取出数据渲染到view中的,所以在加载controller的时候,并不需要加载view和model,完全是有controller自己控制的。
其他现代的框架其基本原理也跟这个mvc框架差不多。
本文深入解析ThinkPHP框架的主框架入口文件,阐述了如何搭建框架主框架及理解单入口文件的作用。通过具体代码示例,详细解释了路径解析、控制器启动和配置文件加载等关键步骤,最终实现了一个简单的MVC框架。

832

被折叠的 条评论
为什么被折叠?



