ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。

最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。 [1]

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发展历程,无数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完整版 [2]  ;

2015年12月11日,ThinkPHP 5.0 Beta 发布;

2017年02月27日,Thinkphp5.0.5完整版正式发布 [3]  ;

2018年05月02日,Thinkphp5.1.0RC版本发布; [4]

2019年04月22日,Thinkphp6.0RC2版本发布 [5]  ;

2019年08月16日,Thinkphp6.0RC4版本发布 [6]  ;

2019年12月24日,Thinkphp6.0.1版本发布 [7]  ;

简单易用

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

THINKPHP初始页面

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

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

独创机制

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

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

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

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

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

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

THINKPHP目录结构

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支持

SEOURL路由支持

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的发展历程及特性相关推荐

  1. 腾讯云为金融换“心“,TDSQL的发展历程和特性

    TDSQL的发展历程 TDSQL是针对金融联机交易场景推出的强一致性数据库解决方案,产品形态为一个数据库集群,具备高性能低成本.线性水平扩展.金融级高可用.企业级安全性.全球灵活部署.数据强一致性等特 ...

  2. JavaScript异步调用的发展历程

    同步与异步 通常,代码是由上而下依次执行的.如果有多个任务,就必须排队,前一个任务完成,后一个任务才能执行.这种连续的执行模式就叫做同步. a(); b(); c(); 复制代码 上面代码中,a.b. ...

  3. 焦李成教授谈深度神经网络发展历程

    来源:西电人工智能学院 摘要:焦李成教授谈深度神经网络发展历程 2018年11月18日下午,计算机科学与技术学部主任.人工智能学院焦李成教授在成都参加了由中国人工智能学会主办的人工智能大讲堂并做特邀报 ...

  4. 细说JavaScript异步函数发展历程

    2019独角兽企业重金招聘Python工程师标准>>> < The Evolution of Asynchronous JavaScript >外文梳理了JavaScri ...

  5. node windows更新_node.js 01 简介 - 产生,发展历程,优势,适用场景,实际应用

    node.js是什么 上面是来自于node.js 官网 (https://nodejs.org)的介绍.翻译过来,意思是node.js 基于JavaScript, 需要运行在Chrome V8 的 J ...

  6. JAVASCRIPT发展历程

    JAVASCRIPT发展历程 诞生 JavaScript 因为互联网而生,紧跟着浏览器的出现而问世.回顾它的历史,就要从浏览器的历史讲起. 1990年底,欧洲核能研究组织(CERN)科学家 Tim B ...

  7. 目标检测近5年发展历程概述(转)

    目标检测近5年发展历程概述,从R-CNN到RFBNet(2013--2018)(转) 2018年09月24日 12:32:02 C小C  [时间]2018.09.24 [题目]目标检测近5年发展历程概 ...

  8. Redis消息队列发展历程

    简介:Redis是目前最受欢迎的kv类数据库,当然它的功能越来越多,早已不限定在kv场景,消息队列就是Redis中一个重要的功能.Redis从2010年发布1.0版本就具备一个消息队列的雏形,随着10 ...

  9. php发展历,PHP的发展历程

    PHP的发展历程 了解一门语言,我们必须知道这门语言的发展史,现在我通过版本的变化以时间轴的形式来说明PHP的发展历程. 1.1995年初PHP1.0诞生 Rasmus Lerdof发明了PHP,这是 ...

最新文章

  1. 电脑与人脑,信息与知识
  2. python多线程为啥是假的?(GIL 全局解释器锁)(python多线程不适合并行化的计算密集型代码)
  3. 交叉验证(Cross Validation)方法思想简介
  4. 用户体验与可用性测试_可用性作为用户体验的原则
  5. python简易发红包_学习python:练习5.简单红包程序
  6. dt dl dd 的英文含义
  7. Hibernate【2】——封装工具、HibernateUtil类以及DAO层的BaseDAO类
  8. MySQL 编码相关小结
  9. redhat linux防火墙状态,Redhat下配置iptables防火墙
  10. C语言 判断一个数是否为2的若干次幂
  11. 电脑系统重装出现蓝屏解决方法
  12. 高分一号二号PMS数据处理
  13. 大道至简:透过现象看本质
  14. ChemDraw如何画立体图?
  15. 鸟哥的Linux私房菜(服务器)- 第十一章、远程联机服务器SSH / XDMCP / VNC / RDP
  16. 源站IP暴露了怎么自查?
  17. 面试通过后如何拒绝HR拿offer
  18. idea提交git报401错误解决办法
  19. AD在绘制PCB时候出现 Un-Routed Net Constraint Violation问题解决
  20. 《高级语言程序设计》习题集

热门文章

  1. 严寒下逆行核酸检测的志愿者身影最美——安徽驻京团工委抗疫情
  2. 学习笔记(02):Java小白修炼手册-种族天赋:大谈Java成功之道
  3. 数据结构中堆栈和内存堆栈的区别
  4. SpringBoot系列教材 (十三)- 持久层支持 - springboot中如何运用JPA,简单例子
  5. SQL中的注释语句(三种注释)
  6. 【推荐】PHP-集成函数总结
  7. Logger 日志输出请使用占位符 {}
  8. C了个++:02 - C++的名称空间(层次)
  9. 朗沃20140426
  10. Flask中的CBV