ThinkPHP 是一个快速、兼容而且简单的轻量级国产 PHP 开发框架,遵循 Apache2 开源协议发布,从 Struts 结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和 MVC 模式。
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 能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。并且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注您的业务逻辑。
特性
简单易用
模型(M):模型的定义由 Model 类来完成。Model 类位于项目目录下面的 LibModel 目录。
控制器(C):应用控制器(核心控制器)和 Action 控制器都承担了控制器的角色,区别在于 Action 控制器完成业务过程,而应用控制器(App 类)负责调度控制。Action 控制器位于项目目录下面的 LibAction 目录。
视图(V):模板的实现是和框架无关的,做到了 100%分离,可以独立预览和制作。模板目录位于项目目录下面的 Tpl 目录。
重要的概念
要掌握 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 结构,提供了一个多层的、可定制的安全体系来为应用开发提供安全控制。安全体系中主要有: 安全拦截器、认证管理器、决策访问管理器 、运行身份管理器。
分层架构
ThinkPHP 的分层架构采用三层架构模式:
表现层
包含模板视图、用户界面、JS、Flash 等通过模板引擎的支持,可以使用标签定义简化表现层的定义工作。
业务层
包含业务接口层、业务逻辑层、实体层、数据访问层 Action 控制器作为业务接口层,提供系统各种业务操作的入口。因此,不提倡在控制器类中写过多的业务逻辑代码,虽然说很难严格控制。具体的业务逻辑应该封装到数据访问对象(Dao)类中实现,如果觉得过于复杂,还可以把子业务在 Helper 类中包装后统一调用。业务处理过程一般会构造出业务实体对象(如 Vo 对象),对业务实体对象的存取通过数据访问层完成。数据访问层把实体对象和数据库数据之间建立映射关系,并且封装了通用的数据操作。
数据层
支持的数据库有 MySql、MsSql、PgSql、Oracle、Sqlite,最新版本已经提供 PDO 的支持,数据库的选用和业务逻辑没有关系。
相关开源项目
ThinkSNS
ThinkSNS 基于许多优秀的开源软件开发,提供全方位的社交网络(SNS)解决方案。ThinkSNS 源于办公圈项目,WEB 端基于国内技术领先的 ThinkPHP 框架开发,另外还有 IM 客户端软件。ThinkSNS 全部基于开源项目,同时也作为开源项目,免费提供给用户使用。项目框架都有完善的文档和实例,非常适合二次开发。能为致力于 SNS 方向的站长提供帮助,是我们的最大的梦想!
OneThink
OT 是 ThinkPHP 官方发布的内容管理框架;OneThink 以其便捷的建站、丰富的扩展、灵活的二次开发,以及云服务的支持,为广大个人和企业建站带来新的契机和机遇,即将成为互联网新的弄潮儿。
ThinkCMF
ThinkCMF 是由第三方团队开发的中文内容管理框架;ThinkCMF 是一款基于 PHP+MYSQL 开发的中文内容管理框架。ThinkCMF 提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据自身的需求以应用的形式进行扩展。每个应用都能独立的完成自己的任务,也可通过系统调用其他应用进行协同工作。在这种运行机制下,开发商场应用的用户无需关心开发 SNS 应用时如何工作的,但他们之间又可通过系统本身进行协调,大大的降低了开发成本和沟通成本。普通的 CMS(内容管理系统)一般不能完成所有的需求,而因为 CMS 在 ThinkCMF 内部只是已一个应用的形式存在,所以使用 ThinkCMF 你可以用 CMS 来管理你的内容,用电影网站系统来管理视频,用电商系统来管理电商网站。这些程序不会影响,你可以模块化的增加或减少应用。
tpflow
tpflow 基于 thikphp 5.1 开发的符合快速设计理念的工作流组件。