ThinkPHP


ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架。

简介概述

ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。

ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。

作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。并且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注您的业务逻辑。


相关特点

简单易用

模型(M):模型的定义由Model类来完成。Model类位于项目目录下面的LibModel目录。

控制器(C):应用控制器(核心控制器)和Action控制器都承担了控制器的角色,区别在于Action控制器完成业务过程,而应用控制器(App类)负责调度控制。Action控制器位于项目目录下面的LibAction目录。

视图(V):模板的实现是和框架无关的,做到了100%分离,可以独立预览和制作。模板目录位于项目目录下面的Tpl目录。


独创机制

ThinkTemplate是一个使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签,使用了动态编译和缓存技术,而且支持自定义标签库。其特点包括:

1)支持XML标签库和普通标签的混合定义;

2)编译一次,下次直接运行而无需重新编译;

3)模板文件更新后,自动更新模板缓存;

4)自动加载当前操作的模板缓存文件,无需指定模板文件名称;

5)支持编码转换和Content-Type更换;

6)模板变量输出前缀支持,避免变量名称冲突;

7)模板常量替换,无需设置模板变量;

8)支持变量组合调节器和格式化功能;

9)支持替换其它模板引擎插件使用;

10)支持获取模板页面内容。

内置XML模板引擎,支持标签库


富模型支持

1)聚合模型:

聚合模型是一种虚拟模型,用于把数据表的字段抽象化,更加容易理解和操作。

我们可以把数据表中的某些属性进行数据封装,这样就把枯燥的数据表字段赋予更好的可读性。

2)静态模型:

静态模型可以让模型的数据静态化,而不需要频繁和数据库打交道,可以用于不经常改变的数据表。而且ThinkPHP在ORM层上面模拟实现了数据库的视图功能,这是ThinkPHP独创的一项技术,使得多表的关联查询具有更高的效率和可操作性,而无需定义复杂的关联关系,让关联关系更加浅显易懂。

有些时候,数据表的数据一旦添加后就不再容易变化,我们更希望把这样的模型数据静态化,而不需要再次访问数据库。ThinkPHP支持静态模型的概念,一旦把模型设置为静态,那么会在第一次初始化的时候获取数据表的全部数据,并生成缓存,以后不会再连接数据库。而只需要直接访问模型的dataList数据即可。

3)视图模型

ThinkPHP在ORM模型里面模拟实现了数据库的视图模型,该功能可以用于多表查询。

要定义视图对象,需要设置viewModel为true,然后设置viewFields属性即可。

CURD和操作高度自动化支持

ThinkPHP提供了灵活和方便的数据操作方法,不仅实现了对数据库操作的四大基本操作(CURD):创建、读取、更新和删除的实现,还内置了很多实用的数据操作方法,提供了ActiveRecords模式的最佳体验。


丰富的查询语言支持

ThinkPHP大多数情况使用的都是对象查询,因为充分利用了ORM查询语言,了解查询条件的定义对使用对象查询非常有帮助,对于复杂的查询,或者从安全方面考虑,可以使用HashMap对象或者索引数组来传递查询条件。


目录结构自动创建THINKPHP目录结构

ThinkPHP具有项目目录自动创建功能,你只需要定义好项目的入口文件,第一次执行入口文件的时候,系统会自动创建项目的相关目录结构,如果是linux环境下面需要给项目入口文件里面指定的路径设置可写权限。


分布式数据库支持

ThinkPHP的模型支持主从式数据库的连接,配置DB_DEPLOY_TYPE为1可以采用分布式数据库支持。


多数据库连接和切换支持

如果需要在特殊的时候连接多个数据库,那么可以尝试使用ThinkPHP的多数据库连接特性:包括相同类型的数据库和不同类型的数据库。(注意:所谓的相同类型数据库的定义是指和项目配置文件或者模型的数据库连接的数据库类型相同。)


ActiveRecords模式和丰富的ROR特性

ThinkPHP实现了ActiveRecords模式的ORM模型,采用了非标准的ORM模型:表映射到类,记录(集)映射到对象,字段属性映射到对象的虚拟属性。最大的特点就是使用方便,从而达到敏捷开发的目的。


灵活简单的项目配置

ThinkPHP提供了灵活的配置功能,采用最有效率的PHP返回数组方式定义,支持惯例配置、项目配置、调试配置和模块配置,并且会自动生成配置缓存文件,无需重复解析的开销。对于有些简单的应用,你无需配置任何配置文件,而对于复杂的要求,你还可以增加模块配置文件,另外ThinkPHP的动态配置使得你在开发过程中可以灵活的调整配置参数。

ThinkPHP在项目配置上面创造了自己独有的分层配置模式,其配置层次体现在:惯例配置—>项目配置—>模块配置—>操作(动态)配置,优先顺序从右到左(在没有生效的前提下)。


模型自动验证和处理

系统内置了数据对象的自动验证功能,而大多数情况下面,数据对象是由表单提交的$_POST数据创建。需要使用系统的自动验证功能,只需要在Model类里面定义$_validate属性,是由多个验证因子组成的数组,支持的验证因子格式:验证字段,验证规则,错误提示,验证条件,附加规则,验证时间。


静态页面生成和多元化缓存机制

ThinkPHP内置了静态缓存的功能,并且支持静态缓存的规则定义。要使用静态缓存功能,需要开启HTML_CACHE_ON参数,并且在项目配置目录下面增加静态缓存规则文件htmls.php。

丰富的数据库及PDO支持

SEO和URL路由支持

AJAX支持

易扩展的系统基类库

系统基类库

ThinkPHP框架通过基类库的概念把所有系统类库都集成在一起,包括ThinkPHP的核心类库。

基类库分成Think核心类库、ORG扩展类库,在这主要介绍的是核心基类库,核心基类库的作用是完成框架的通用性开发而必须的基础类和常用工具类等,包含有:

Think.Core 核心类库包

Think.Db 数据库类库包

Think.Util系统工具类库包

Think.Template 内置模板引擎类库包

Think.Exception 异常处理类库包函数库

ThinkPHP内置了一个系统公共函数库,提供了一些系统需要的函数,系统函数库位于ThinkPHP的Common目录下面,名称为functions.php。

每个项目可以定义自己的函数库,位于项目的Common目录下面的common.php文件。

如果项目在Common目录下面有定义自己的common.php文件,框架会在初始化的时候自动导入,而无需自己导入。


匹配导入

Import方法是ThinkPHP内建的类库和文件导入方法,提供了方便和灵活的类似于命名空间的文件导入机制。


自动编码转换

ThinkPHP框架的文件全部采用UTF-8编码格式,UTF-8的支持和自动输出编码转换的功能让页面表现更加灵活。您可以配置输出的页面编码格式,如gb2312等(默认采用UTF-8输出)。系统根据配置文件中设置的编码格式自动对页面进行编码转换,支持iconv和mb_string两种方式,为了提高效率,如果系统的模板编码设置和输出编码设置项相同,则不会进行编码转换。ThinkPHP可以设置模板编码、输出编码和数据库编码,并自动完成转换工作,让你的应用不再受编码的苦恼。


相关概念

要掌握ThinkPHP,首先要了解其中的几个重要概念,对于熟悉Java开发的朋友,应该很容易理解下面的一些概念。

Action对象

和Struts框架的Action类似,Action对象主要提供应用逻辑的控制和处理,属于ThinkPHP的控制层,由核心的App类完成模块和操作的解析后直接转交给相应的Action对象处理。应用类中的所有Action对象都继承系统的Action基类。

Dao对象

是指DataAccessObject(数据访问对象),Dao设计模式把底层的数据访问逻辑和业务逻辑分开,夹在业务层与数据层中间,用于数据库访问和操作。可以针对单表和多表操作。ThinkPHP中的Dao对象属于建立在抽象数据库访问层之上的事务性对象。

VO对象

是指ValueObject(数据对象),更加精确的说是业务对象,因为VO对象是存活在业务层的,供业务逻辑使用的。VO对象和数据表存在一种映射关系,VO对象的每个属性对应数据表(或者视图)的一个字段,你完全可以添加其他非数据表字段的VO对象属性,以用于业务逻辑操作,例如关联字段。VO对象有个特殊的保留属性_info,是一个数组变量,用来保存该VO对象的一些特殊信息。和VO对象对应的概念还有PO(持久数据对象),VO和PO的概念都来自于O/RMapping(ObjectRelationalMapping,对象关系映射),PO只能用在数据层(也就是说PO对象的属性必须和数据表一一对应),VO用在业务逻辑层和表示层(可以有自己的额外属性)。各层操作属于该层自己的数据对象,这样就可以降低各层之间的耦合,便于以后系统的维护和扩展。如果将PO用在各个层中就相当于我们使用全局变量,我们知道在OO设计非常不赞成使用全局变量。

VoList对象

在ThinkPHP框架中,把查询后的数据集(ResultSet)转换成数据列表对象,也就是VOLIST对象,和ResultSet对象不同的是每个记录就相当于一个VO对象。在VOLIST对象中可以方便地遍历和操作VO对象。VO对象和VOLIST对象都属于ThinkPHP框架中的实体对象,是数据操作的基本元素。如果你在开发过程中没有使用Dao模式,而是通过数据库驱动类直接操作数据库,那么返回的是ResultSet对象。ThinkPHP系统提供了从ResultSet对象转换为VOLIST对象的方法。

组件和插件支持

基于角色的权限控制体系

企业级的应用是离不开安全保护的,ThinkPHP以基于Spring的Acegi安全系统作为参考原型,并做了简化,以适合目前的ThinkPHP结构,提供了一个多层的、可定制的安全体系来为应用开发提供安全控制。安全体系中主要有: 安全拦截器、认证管理器、决策访问管理器 、运行身份管理器。

0

【ThinkPHP隶属于分类: 技术工具

它起初由本站用户:刘欣Eden于4年前 创建。

该内容的链接是:

目录