Thinkphp介绍
ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。
ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。
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能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。并且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注您的业务逻辑。
Thinkphp发展历史
ThinkPHP发展历程,无数TPer一起见证了ThinkPHP的成长:
2006年01月15日, ThinkPHP的雏形版本FCS0.6.0发布;2006年02月12日,(元宵节)发布FCS 0.6.1 版本,Google讨论组成立;
2006年03月15日, FCS 0.7.0版本发布;2006年05月07日, FCS 0.8版本发布;2006年10月25日, FCS 0.9.0版本发布;
2006年12月25 日,SF项目和Google网站ThinkPHP项目申请完成;2007年01月01日, FCS正式更名为ThinkPHP;
2007年01月08日, ThinkPHP 0.9.5版发布同期官方网站开通;
2007年02月21日, TOPThink社区暨新版ThinkPHP官方网站开通,并提供社区支持;
2007年02月25日, 发布ThinkPHP 0.9.6版本,完成FCS到ThinkPHP的正式迁移;
2007年04月29日, ThinkPHP发布0.9.7版本;2007年07月01日, ThinkPHP发布0.9.8版本;
2007年10月15 日,ThinkPHP发布1.0.0RC1版本,完成PHP5的重构;
2007年12月15 日,ThinkPHP发布1.0.0正式版本标志着ThinkPHP步入轨道;
2008年10月01日, ThinkPHP发布1.0.3正式版本;
2008年12月25 日,ThinkPHP发布1.5正式版本并启动商业化支持服务,ThinkPHP进入稳定发展;
2009年05月01日, ThinkPHP 发布1.6.0RC1版本;
2009年10月01日, ThinkPHP发布2.0版本完成新的重构和飞跃,这是一次划时代的版本;
2012年04月05日, ThinkPHP发布3.0版本 庆祝ThinkPHP发布6周年;
2012年10月08日, ThinkPHP发布3.1版本;
2012年11月11日, ThinkPHP3.1.2扩展包;
2013年05月09日,ThinkPHP发布3.1.3完整版;
2013年12月18日,ThinkPHP发布3.2正式版;
2014年10月31日,ThinkPHP发布3.2.2完整版
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可以设置模板编码、输出编码和数据库编码,并自动完成转换工作,让你的应用不再受编码的苦恼。