3.2版本并非3.1的一个小升级,而是一个大版本的更新。与3.1进行对比学习更容易掌握吧。

目录结构发生了改变

初始的目录结构

1
2
3
4
5
6
www  WEB部署目录(或者子目录)
├─index.php 入口文件
├─README.md README文件
├─Application 应用目录
├─Public 资源文件目录
└─ThinkPHP 框架目录

Thinkphp中的目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
├─ThinkPHP 框架系统目录(可以部署在非web目录下面)
│ ├─Common 核心公共函数目录
│ ├─Conf 核心配置目录
│ ├─Lang 核心语言包目录
│ ├─Library 框架类库目录
│ │ ├─Think 核心Think类库包目录
│ │ ├─Behavior 行为类库目录
│ │ ├─Org Org类库包目录
│ │ ├─Vendor 第三方类库目录
│ │ ├─ ... 更多类库目录
│ ├─Mode 框架应用模式目录
│ ├─Tpl 系统模板目录
│ ├─LICENSE.txt 框架授权协议文件
│ ├─logo.png 框架LOGO文件
│ ├─README.txt 框架README文件
│ └─ThinkPHP.php 框架入口文件

对比一下3.1版本的目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
├─ThinkPHP.php     框架入口文件
├─Common 框架公共文件
├─Conf 框架配置文件
├─Extend 框架扩展目录
├─Lang 核心语言包目录
├─Lib 核心类库目录
│ ├─Behavior 核心行为类库
│ ├─Core 核心基类库
│ ├─Driver 内置驱动
│ │ ├─Cache 内置缓存驱动
│ │ ├─Db 内置数据库驱动
│ │ ├─TagLib 内置标签驱动
│ │ └─Template 内置模板引擎驱动
│ └─Template 内置模板引擎
└─Tpl 系统模板目录

3.1版本的前端模板文件是放在TPL目录里的,而3.2则放在View文件

3.2版本采用命名空间

3.2版本全面采用命名空间方式定义和加载类库文件,有效的解决多个模块之间的冲突问题,并且实现了更加高效的类库自动加载机制。

由于新版完全采用了命名空间的特性,因此只需要给类库正确定义所在的命名空间,而命名空间的路径与类库文件的目录一致,那么就可以实现类的自动加载。

1
2
3
namespace Org\Util;
class File {
}

系统会自动加载 ThinkPHP/Library/Org/Util/File.class.php 文件。

由于采用了命名空间的方式,原本需要手动导入类库文件的操作,现在已经不需要了。可以自动完成加载,已验证码为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//3.1版本
import('ORG.Util.Image');
Image::buildImageVerify(4,1,'png',30,30,'code');
//3.2版本
$config = array(
'fontSize' => 20,
'length' => 2,
'expire' => 60,
'imageW' => 70,
'imageH' => 35,
'reset' => false,

);
//$config作为配置验证码规格大小样式。
$Verify = new \Think\Verify($config);
//自动加载类库
$Verify->entry();
//Verify类已经封装好了验证码的检验函数,check();

3.2版本无需配置分组,直接使用独立分组

在3.2中,例如建立了一个Home分组和Admin分组用来对应前端和后台。他们彼此之间不能相互访问,否则会报错。

1
2
3
4
5
6
7
//入口文件 index.php
define('BIND_MODULE','Home');
//当开启绑定模块选项以后,就无法访问其他分组了,Localhost/blog/index.php/Admin 报错
//未开启则可以访问
//相应的后台入口文件 admin.php
define('BIND_MODULE','Home');
//如此两个分组相互独立,拥有各自的配置文件。

差别

大部分使用方法和3.1版本差别不大,加入了不少新的特性。例如可以切换数据库,连贯操作似乎变得更多了。并且高版本的php语法知识也在这个版本之中体现出来了。一方面再深入一下php原生语法的知识,另一方面再对命名空间的知识得补补。毕竟之后tp5还得用。。