`
mengdejun
  • 浏览: 408864 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Thinkphp

    博客分类:
  • Php
阅读更多

一、什么是ThinkPHP
ThinkPHP 是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,单一入口模式等,在模版引擎、缓存机制、认证机制和扩展性方面均有独特的表现,也已经越来越多地受到国内PHP开发人员的认可。

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

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

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

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

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

三、分层架构
ThinkPHP的分层架构采用三层架构模式:
表现层:包含模板视图、用户界面、JS、Flash等通过模板引擎的支持,可以使用标签定义简化表现层的定义工作。
业务层:包含业务接口层、业务逻辑层、实体层、数据访问层 Action控制器作为业务接口层,提供系统各种业务操作的入口。因此,不提倡在控制器类中写过多的业务逻辑代码,虽然说很难严格控制。具体的业务逻辑应该封装到数据访问对象(Dao)类中实现,如果觉得过于复杂,还可以把子业务在Helper类中包装后统一调用。业务处理过程一般会构造出业务实体对象(如Vo对象),对业务实体对象的存取通过数据访问层完成。数据访问层把实体对象和数据库数据之间建立映射关系,并且封装了通用的数据操作。
数据层:目前支持的数据库有MySql、MsSql、PgSql、Oracle、Sqlite,最新版本已经提供PDO的支持,数据库的选用和业务逻辑没有关系。

四、目录结构
ThinkPHP的目录结构非常清晰和容易部署。大致的目录结构如下,以项目为基础进行部署。

┎━ThinkPHP 框架系统目录
┃ ┝ Common 公共文件目录
┃ ┝ Lang 系统语言包目录
┃ ┝ PlugIns 公共插件目录
┃ ┗ Lib 应用类库目录
┃ ┝ Think 系统运行库目录(必须)
┃ ┗ ORG 扩展ORG类库包(非必须)

┝━App App项目目录
┃ ┝ Cache 模版缓存目录
┃ ┝ Common 公共文件目录
┃ ┝ Conf 项目配置目录
┃ ┝ Html 静态文件目录
┃ ┝ Lib 应用类库目录
┃ ┝ Action 控制器(模块)类目录
┃ ┝ Dao Dao类文件目录
┃ ┝ Vo Vo类文件目录
┃ … 下面的应用目录可根据需要选择和定义
┃ ┝ Common 公共应用类目录
┃ ┗ Help 项目助手类目录

┃ ┝ PlugIns 项目插件目录
┃ ┝ Tpl 项目模版文件目录
┃ ┝ Lang 项目语言包目录
┃ ┝ Logs 项目日志文件目录
┃ ┝ Temp 数据缓存目录
┃ ┗ Uploads 上传文件目录

┃…更多项目目录(和App目录类似,每个项目采用独立目录,便于部署)

┝━Public 网站公共目录(多项目公用)
┃ ┝ Js JS类库目录(建议)
┃ ┝ Images 公共图像目录(建议)
┃ ┗ Uploads 公共上传目录(建议)

其中ThinkPHP系统目录和App目录都可以部署在非WEB目录下面,在WEB目录下面可以仅仅放置项目入口文件和网站公共目录(如Public目录)。项目独立目录,方便部署和团队开发。每个项目有自身的配置文件、语言文件、插件文件和日志文件。 

五、执行过程
基于ThinkPHP框架的应用程序组成和执行过程

在ThinkPHP中,系统会根据当前的URL调度器对当前的URL进行分析,判断要执行的模块和操作。官方内置了一个ThinkDispatcher插件来完成该调度。每个模块在框架中对应一个Action类文件,而每个操作就是Action类中的一个方法,系统会根据模块名称自动寻找项目类库Action目录下面的相关类,如果没有找到,会在加载的插件中寻找是否存在该模块插件,如果依然没有,则抛出异常。找到模块类后,就判断是否存在操作方法,如果不存在则会继续寻找父类中的方法,如果没有会尝试寻找插件操作方法,如果依然不存在,那么会寻找是否存在自动匹配的模版文件。如果存在模版文件,那么就直接渲染模版输出。

六、值得推荐的特性
要使用一个框架,一定是有某方面的特性会吸引你,我们推荐给您最具价值的框架特性,如果你觉得适合您的需要的话,那么选择ThinkPHP一定不会错,即使他目前还不够完善。只要他的方向是你需要的。

作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。应用开发过程仅仅需要关注您的业务逻辑,并且每个组件都是精心设计和完善的,甚至每个组件都可以单独作为一个系统来研究。而国外的很多PHP框架往往只是实现了其中一部分功能,甚至需要结合很多框架一起进行开发。

系统兼容性
ThinkPHP可以支持Win/Unix服务器环境,支持PHP4.3.0以上版本,完全兼容PHP5。兼容性处理方面,除了兼容函数的实现、对架构函数和析构函数的支持外,并且还模拟了一些PHP5具备的优秀特性,例如SPL的部分实现。

数据库访问层
框架内置了抽象数据库访问层,支持Mysql、MsSQL、Sqlite、PgSQL等多种数据库,最新版本也引入了PDO的支持,还可以通过插件的方式增加需要的数据库驱动。

基类库
框架内置有基类库支持,就连ThinkPHP框架本身的核心类都属于基类库的部分,基类库和框架是合为一体的。基类库包括核心类库包Think和扩展类库包ORG。其中ORG包提供了很多的实用类库。ThinkPHP的类库导入方式和Java的Import类似,例如导入某个工具类Import("Think.Util.ListIterator") 以及目录的导入Import("ORG.Util.*"),熟悉.Net的开发人员还可以使用using的别名,内建的导入缓存支持避免重复的文件导入。

pATHINFO支持
ThinkPHP提供了对搜索引擎友好的充分支持,默认的Dispatch器会把所有的GET方式传值转换成PATHINFO形式,并且会把PATHINFO参数转换成GET数组变量,让您可以保持以前的传值和链接形式,转换的工作由框架来完成。您还可以关闭PATHINFO形式,甚至还支持自定义的PATHINFO格式,让你的URL富有创造性。

模板引擎
ThinkPHP内置了一个性能卓越的模板引擎,是一个使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签,而且支持自定义标签库,利用该模板引擎可以方便地定义模板文件,从而达到快速开发的目的。通过插件方式还可以灵活地选择你喜欢的模版引擎,现在已经提供了包括Smarty在内的其他模板引擎插件。

Ajax支持
ThinkPHP内置SmartAjax和ThinkAjax类库,对Ajax提供良好支持。支持HTML事件绑定、表单提交、附件上传和定时执行等Ajax操作。当然,您也一样可以扩展任何其他Ajax类库来进行Ajax操作。

缓存机制
ThinkPHP在数据缓存方面包括SQL查询缓存、数据对象缓存、静态页面缓存以及浏览器缓存等多种机制,采用了包括文件方式、共享内存方式和数据库方式在内的多种方式进行缓存,通过插件方式还可以增加以后需要的缓存类,让应用开发可以选择更加适合自己的缓存方式,从而有效地提高应用执行效率。

国际化和UTF8支持
UTF-8的支持和自动输出编码转换的实现让页面表现更加灵活,项目语言包功能保证了应用的多语言支持。

表单验证和自动填充
ThinkPHP自带的验证类结合Vo的自动验证和自动填充功能,让你的表单提交轻而易举,不再担心复杂的表单处理。系统会自动把提交的表单数据和相关的Vo类进行验证和处理,然后创建一个数据对象,交给抽象数据库访问层进行操作。

权限认证
ThinkPHP框架内置了基于RBAC方式的权限认证机制,并且通过ThinkPHP框架的管理后台可以方便地进行授权节点(包括项目、模块和操作)的创建和授权操作,以及用户组的分配。

配置灵活
框架的配置功能也比较灵活,可以支持包括INI文件、XML文件、PHP数组、PHP对象和定义文档在内的配置格式,并且会对配置文件自动生成PHP常量定义文件格式的缓存,无需重复解析的开销。项目配置文件和数据库配置文件分离。

扩展性能
框架的可扩展能力也毫不逊色,对于常用的类库可以通过扩展基类库来完善支持,项目经验很容易沉淀,也比较容易形成公司自己的私有开发类库。ThinkPHP采用和WordPress类似的插件机制,通过插件功能,你可以实现替换模板引擎、增加数据库支持、实现URL路由控制、实现安全过滤和输出过滤、增加外挂模块和操作,而不用修改框架核心文件,轻松扩展,不再担心不断变化的复杂应用需求,同时也免去升级的不便。同时,内置的模板引擎也同样具有扩展能力,因为可以通过自定义标签库的方式来增加自己的标签解析功能。就连前端的JS类库,也可以轻松的扩展和调用。

七、总结
在借鉴国外优秀思想的同时,ThinkPHP也更多地考虑了国内的应用开发需要。PHP4兼容、完全支持UTF-8,以及PATHINFO支持等,更加有利于国内的主机环境和开发需要。秉着易用和易扩展的原则,ThinkPHP采用容易理解的项目、模块和操作机制加上内置的一些自动化操作方法,让应用开发变得更加简单,其功能可以通过基类库以及各种插件的形式灵活扩展,从而满足日益增长的业务需求。正是因为具备良好的开发结构,使得ThinkPHP在开发大型应用的时候并不会显得有很多障碍,基于构件的方式,以及配合框架的项目管理机制同样可以让你在处理大型应用的时候一展所长。

当然,框架的完善和优化过程也是需要一个长期的过程,希望国内的PHP开发人员不吝指教,建议批评、共同完善。本在线手册也会逐步完善。

  • 大小: 5.5 KB
分享到:
评论

相关推荐

    ThinkPHP新闻发布系统(前台+后台)绝对易学易用

    《ThinkPHP新闻发布系统:构建前端与后端的全面指南》 ThinkPHP,作为一个轻量级的PHP开发框架,以其简单、高效的特性深受开发者喜爱。本教程将带你深入理解如何利用ThinkPHP构建一个完整的新闻发布系统,包括前端...

    ThinkPHP_v5.0.7.zip_ThinkPHP V5.0.7_thinkphp

    《深入理解ThinkPHP V5.0.7框架》 ThinkPHP,作为一个广受开发者欢迎的开源PHP框架,其V5.0.7版本是其发展过程中一个重要里程碑。这个版本不仅继承了ThinkPHP一贯的轻量级和面向对象设计原则,还引入了诸多新特性和...

    ThinkPHP问答社区系统源码

    ThinkPHP问答社区系统源码,问答讨论社区系统源码,一套基本的问答讨论社区框架,基于thinkphp开发,只是部分不太完善,基础的问答模块还是比较完整的,有能力的大佬可以拿去二开一下使用的。 ThinkPHP问答社区系统...

    130套thinkphp5网站模板源码,企业网站建设thinkphp模板,建站thinkphp源码模板网站搭建

    本资源包含130套专为ThinkPHP5框架设计的网站模板源码,是用于企业网站建设的理想选择,可以帮助开发者快速构建美观且功能完善的网站。 首先,我们要理解ThinkPHP5框架的核心特点。它采用了MVC(Model-View-...

    thinkphp漏洞检测工具

    《ThinkPHP漏洞检测工具详解》 ThinkPHP是中国最流行的PHP框架之一,因其强大的功能和易用性深受开发者喜爱。然而,任何软件系统都可能存在安全漏洞,ThinkPHP也不例外。为了保障Web应用的安全,开发者和安全专家们...

    ThinkPHP3.1完全开发手册

    ThinkPHP3.1完全开发手册 版权申明 发布本资料须遵守开放出版许可协议 1.0 或者更新版本。 未经版权所有者明确授权,禁止发行本文档及其被实质上修改的版本。 未经版权所有者事先授权,禁止将此作品及其衍生作品以...

    thinkphp完整源码.rar

    《深入剖析ThinkPHP框架:基于“thinkphp完整源码.rar”》 ThinkPHP是中国最流行的PHP框架之一,以其简洁、高效、易用的特性深受开发者喜爱。本文将围绕"thinkphp完整源码.rar"展开,深入解析ThinkPHP的核心概念、...

    thinkphp3 与thinkphp5 日志信息泄露检测脚本.zip

    这个压缩包文件“thinkphp3与thinkphp5日志信息泄露检测脚本.zip”提供了针对ThinkPHP 3和ThinkPHP 5版本的检测工具,用于检查可能存在的日志泄露问题。下面我们将深入探讨ThinkPHP框架的日志系统、信息泄露的风险...

    ThinkPHP6.0完全开发手册.pdf

    ThinkPHP 6.0 完全开发手册 ThinkPHP 是一个免费开源的、快速、简单的面向对象的轻量级 PHP 开发框架,旨在敏捷 WEB 应用开发和简化企业应用开发。ThinkPHP 从诞生以来一直秉承简洁实用的设计原则,在保持出色的...

    亲测thinkphp3.1.3完美支持php7 thinkphp3.1.3--for php7.zip

    标题中的“thinkphp3.1.3完美支持php7”意味着这个压缩包是针对PHP7环境优化过的ThinkPHP 3.1.3框架版本。ThinkPHP是中国常用的开源PHP框架之一,以其简洁、高效的代码风格和丰富的功能而受到开发者的欢迎。PHP7则是...

    thinkphp_thinkphp_thinkphp5_

    本压缩包“thinkphp_thinkphp_thinkphp5_”包含了一个基于ThinkPHP5的模板开发实例,旨在帮助开发者快速理解和运用ThinkPHP5框架进行项目开发。 首先,我们要理解ThinkPHP5的核心设计理念——“简洁、快速、优雅”...

    thinkphp5.1最新完整版

    ThinkPHP是一个免费开源的,快速、简单的...遵循Apache2开源许可协议发布,意味着你可以免费使用ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产品发布/销售。 最新版还热乎的Thinkphp5.1完整开发版下载。

    ThinkPHP6.0完全开发手册

    "ThinkPHP6.0完全开发手册" 本手册主要讲述ThinkPHP 6.0框架的使用和开发指南,涵盖了ThinkPHP 6.0的基础知识、开发规范、配置架构、请求流程、控制器、模型、视图、模板引擎、日志处理、调试、验证、缓存、Session...

    ThinkPHP 5.0.0_5.0.23 RCE 漏洞分析1

    ThinkPHP 5.0.0_5.0.23 RCE 漏洞分析 ThinkPHP 是一个流行的 PHP 框架,它提供了许多实用的功能来帮助开发者快速构建 Web 应用程序。然而,在 ThinkPHP 5.0.0 到 5.0.23 版本中存在一个 Remote Code Execution(RCE...

    thinkPHP6接口编写示例

    在本示例中,我们将深入探讨`thinkPHP6`框架如何用于编写接口,特别是与小程序商城和后台管理系统相关的接口设计。`thinkPHP6`是一款基于`Swoole`的高性能PHP框架,它提供了丰富的功能和优秀的性能,适用于构建API、...

    thinkphp6境外商城源码

    《基于ThinkPHP6的境外商城源码解析与应用》 ThinkPHP6,作为国内流行的开源PHP框架,以其高效、简洁的特性受到了广大开发者们的青睐。本篇将详细解析一款基于ThinkPHP6构建的境外商城源码,探讨其设计思想、核心...

    ThinkPHP完美后台模板

    "ThinkPHP完美后台模板"是一款基于ThinkPHP框架的高级网页设计模板,专为构建功能丰富的后台管理系统而设计。它能够满足各种类型的应用场景,包括社交网络(SNS)、电子商务平台和企业网站等。该模板充分利用了...

    ThinkPHP5快速入门手册

    ThinkPHP5.0版本相较于以往版本,引入了很多新的特性,包括更灵活的路由管理、依赖注入、请求缓存、增强的查询语法、路由地址反解生成、改进的模型功能等。这些新特性不仅加强了ThinkPHP的功能,也提升了开发的效率...

    ThinkPHP5留言板_thinkphp5_

    【ThinkPHP5留言板】是一个基于ThinkPHP5框架开发的简易留言板应用。这个应用的主要功能是让用户能够方便地在网站上留下他们的信息,提供了一个基本的交互式平台。它是一个轻量级的系统,适合初学者了解和学习...

    thinkPHP6简单抽奖系统

    《基于ThinkPHP6构建简单抽奖系统详解》 在IT行业中,抽奖系统是常见的互动功能,广泛应用于各种线上活动。本文将深入探讨如何利用PHP的框架ThinkPHP6来开发一个简单的抽奖系统。首先,我们需要理解ThinkPHP6的核心...

Global site tag (gtag.js) - Google Analytics