ThinkPHP框架完全解析二
来源:互联网 发布:数论相似度算法 编辑:程序博客网 时间:2024/05/16 06:41
第二步:搭建主框架
在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
<?phpheader('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
<?phpclass indexController{public function index(){echo 'hello world';}}
这样,一个简单的mvc框架就已经搭建好了。可以看到这里的view和model并没有出现,这是因为通常是controller从model中取出数据渲染到view中的,所以在加载controller的时候,并不需要加载view和model,完全是有controller自己控制的。
其他现代的框架其基本原理也跟这个mvc框架差不多。
- ThinkPHP框架完全解析二
- ThinkPHP框架完全解析一
- ThinkPHP框架完全解析三
- ThinkPHP框架完全解析四
- ThinkPHP框架完全解析五
- ThinkPHP框架完全解析六
- PHP框架二:ThinkPHP
- ThinkPHP框架总结二
- ThinkPHP框架二 框架配置
- Retrofit2完全解析(二)
- Thinkphp框架感悟(二)
- Android最新动画框架完全解析(二)——Transitions Framework(Transitions 框架)
- Java - 集合框架完全解析
- Java - 集合框架完全解析
- Java - 集合框架完全解析
- 自定义View框架完全解析
- Java集合框架完全解析
- Java集合框架完全解析
- 安卓开发startservice 和bindservice详解
- 高仿今日头条字体渐变指示器,滑动+点击切换,如丝顺滑
- poj2002
- 杭电1000
- 【开源库大全】十、Yalantis全系列
- ThinkPHP框架完全解析二
- mysql学习笔记之三(索引)
- 杭电1000
- 2014年上海邀请赛C Seam Carving(二维dp)
- poj2299
- 我的android第一课
- 编写可读代码的艺术(一)java&android
- mini2440硬件篇之RTC
- 小米 2016届实习生招聘笔试