THINKPHP

THINKPHP_6分词条

THINKPHPTHINKPHP

ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP 开发框架,遵循 Apache2 开源协议发布,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和 MVC 模式,融合了 StrutsAction 思想和 JSPTagLib(标签库)、 RoR 的ORM映射和 ActiveRecord 模式, 封装了 CURD 和一些常用操作, 单一入口模式等,在模版引擎、缓存机制、认证机制和扩展性方面均有独特的表现。 目前版本1.0.4,官方网站:http://www.thinkphp.cn

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

使用 ThinkPHP,你可以更方便和快捷的开发和部署应用,当然不仅仅是企业级应用,任何 PHP应用开发都可以从 ThinkPHP 的简单、兼容和快速的特性中受益。简洁、快速和实用是 ThinkPHP 发展秉承的宗旨,为此 ThinkPHP 会不断吸收和融入更好的技术以保证其新鲜和活力,提供 WEB 应用开发的最佳实践!

ThinkPHP遵循 Apache2 开源许可协议发布,意味着你可以免费使用 ThinkPHP,甚至允许把你的ThinkPHP应用采用商业闭源发布。

目录 [隐藏]

THINKPHP 特性

       
1.简单易用的MVC模式
THINKPHPTHINKPHP初始页面


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

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

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

2.独创的核心编译和项目编译机制

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

1)支持XML标签库和普通标签的混合定义;
2)编译一次,下次直接运行而无需重新编译;
3)模板文件更新后,自动更新模板缓存;
4)自动加载当前操作的模板缓存文件,无需指定模板文件名称;
5)支持编码转换和Content-Type 更换;
6)模板变量输出前缀支持,避免变量名称冲突;
7)模板常量替换,无需设置模板变量;
8)支持变量组合调节器和格式化功能;
9)支持替换其它模板引擎插件使用;
10)支持获取模板页面内容

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

4.富模型支持

1)聚合模型:

聚合模型是一种虚拟模型,用于把数据表的字段抽象话,更加容易理解和操作。
我们可以把数据表中的某些属性进行数据封装,这样就把枯燥的数据表字段赋予更好的可读性。

2)静态模型:

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

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

3)视图模型

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

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

5.CURD和操作高度自动化支持

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

6.丰富的查询语言支持

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

7.目录结构自动创建
THINKPHPTHINKPHP目录结构



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

8.分布式数据库支持

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

9.多数据库连接和切换支持

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

10.ActiveRecords模式和丰富的ROR特性

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

11.灵活简单的项目配置

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

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

12.模型自动验证和处理

THINKPHPTHINKPHP错误显示页面


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

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

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

14.丰富的数据库及PDO支持

15.
SEOURL路由支持

16.
AJAX支持

17.易扩展的系统基类库

系统基类
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内建的类库和文件导入方法,提供了方便和灵活的类似于命名空间的文件导入机制。

18.自动编码转换

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

19.组件和插件支持

20.基于角色的权限控制体系

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

21.详尽的开发指南和全中文注释

THINKPHP 更新记录

       

[1.0.4 版本] 2008-5-16
修正关联写入和数据字段过滤的冲突
修正哈希子目录缓存方式
模块配置文件命名改为:模块名+_config.php
修正Compare标签
修正CX标签库的判断标签
修正模板引擎的IF标签的条件BUG
修改多数据库连接和切换机制 取消addConnect方法的eqType参数,避免了因来回切换的时候的错误
修正Db缓存和Sqlite缓存的数据过期判断
增加项目配置检测,如果项目配置文件发生修改 则重新生成编译项目缓存
增加跳转页面模板和404模板配置配置方式和Action类的display方法templateFile参数一致,默认配置: 'ACTION_JUMP_TMPL'=> 'Public:success', 'ACTION_404_TMPL'=> 'Public:404'
Action类增加404操作方法页面跳转操作和404操作支持模板文件配置
修正html标签库的link和import标签
增加数据查询的IS NULL 和 IS NOT NULL支持
修正连贯操作的一些警告错误
完善join分析 支持left right等方式
修正模板引擎在开启短标签的情况下无法正常输出xml标识的问题
修正ORG.Date.Date类的maxDayOfMonth方法
完善多数据库连接的切换
修改命令行自动创建工具build
修正连贯操作的field方法的判断错误
修正Db类的一处where条件判断的小问题
rand_string加上中文随机字符串生成
修正兼容方法json_encode对布尔值的判断
修正ArrayList类的addall方法
修正max min avg sum等查询方法返回浮点型数据错误的问题
修正数组方式查询的自己使用Like问题
iterate标签增加mod属性 用于计算循环变量的取模替换原来的odd属性
增加Input类,用于输入数据管理
删除已经废弃的目录检查插件
优化模板引擎解析 避免多次实例化模板解析类并简化模板解析类的写法 去掉架构方法定义
修改mobile验证的正则
增加了分页类关于负数的判断
部分CX标签的属性可以支持特殊模板变量
F方法生成的文件会自动加上THINK_PATH判断 避免直接执行 
取消了当指定模块和操作不存在的时候执行默认模块和默认操作,由用户自己定义空模块和空操作来处理。
增加了连贯操作的data方法,用于指定要操作的数据
去掉了已经废弃的三个配置参数 DB_CACHE_ON DB_CACHE_TIME DB_CACHE_MAX
增加表单提交的MAGIC_QUOTES_GPC判断
model类的query和execute方法支持使用__TABLE__字符串系统会自动替换成当前模型对应的表名 
调整了空操作和直接判断模板文件的顺序空操作优先执行
修正Cookie类支持关闭浏览器就失效的情况设置COOKIE_EXPIRE为0或者空字符串或者在使用的时候传递参数0 Cookie::set($name,$value,0);
项目编译缓存文件也加上是否去掉注释的开关

[1.0.3 版本] 2008-3-16
增加空模块支持 如果指定的模块不存在会首先定位是否存在Empty模块
增加核心编译文件的去除空白和注释的开关,在入口文件定义 STRIP_RUNTIME_SPACE 常量为false 可以关闭去除空白和注释
Action缓存由原来的userCache成员属性控制改为项目参数 ACTION_CACHE_ON 控制,便于动态控制
增加数据库字段缓存的开关 惯例配置增加DB_FIELDS_CACHE 用以设置数据库字段是否缓存,默认进行缓存
修正xcache和sqlite缓存方式的读写次数记录
使用视图模型的时候,如果主键是id,不需要再定义getPk方法
修正多语言和多模板的cookie问题
入口文件免设置APP_NAME APP_PATH
完善Cookie类
修正模板检查的时候组件化的支持
模型类的查询操作支持连贯方法
去掉了一些废弃的惯例配置参数 包括:DATA_CACHE_ON 和 DATA_CACHE_MAX
惯例配置增加了DATA_CACHE_SUBDIR 参数控制文件缓存方式是否自动使用子目录哈希缓存
在项目根目录不存在的情况下自动创建
完善对跨库查询的支持
目录自动创建支持写入安全文件

[ 1.0.2 ] 2008-2-21
Model类增加toArray方法
修正因Log类的改动导致Trace错误信息无法正常显示的问题
数据查询返回的数据集由ArrayObject对象改成数组
修正Model类的create方法在定义字段映射的下面的bug
修正虚拟模型下面create方法的bug
Model类的facade方法增加数据表字段的检测
优化Image类的showAdvVerify方法
修正标签库的compare标签
Trace配置文件由原来的_trace.php更名为trace.php
项目调试配置文件由原来的_debug.php更名为debug.php
项目配置文件由原来的_config.php更名为config.php
路由定义文件由原来的_routes.php 更名为 routes.php
静态定义文件由原来的_htmls.php 更名为 htmls.php
Model类的create方法无需type参数,自动判断新增和编辑模型数据
增加第一次运行目录自动生成功能(只需要定义入口文件)
默认项目编译缓存目录为Temp目录

[ 1.0.1 ] 2008-2-2
修正Db类在Oracle下面的parseLimit方法判断
优化数据库驱动类的查询结果获取
Model 类增加字段的表达式插入和更新支持
完善了Db类的条件查询字段中带有空格的处理
Model类增加了delConnect方法用于删除动态增加的数据库连接
增强了分布式数据库的支持 可以设置是否需要读写分离
Model类增加智能切换功能 switchConnect方法可以自动识别是否是相同的数据库连接类型
增加了组件模块的URL分割定义配置 COMPONENT_DEPR 包括对操作链的设置采用相同的参数定义
修正Model类的count等统计方法会自动缓存的问题 DB类默认关闭查询缓存
修正RBAC组件的权限判断
修正组件模块方式下面的模板文件../Public的替换
修正Html标签库的list标签的actionlist属性的支持
修正PDO类在某些数据库下面的getAll方法的BUG
增加核心缓存文件的开关功能 在入口文件里面设置 CACHE_RUNTIME 为 false
修正了使用组件模块的时候模板文件中__URL__的解析问题
修正模板和语言的切换cookie
Model类增加addConnect和switchConnect方法 用于支持多数据库的连接
修正了语言包的缓存导致切换语言无效的问题
Db类增加多数据库连接的内置支持
修正Model类在某些数据库下面where条件表达式不支持where 1 的情况
Db类增加getLastSql方法用于获取最后一次查询的sql语句
完善Log类的操作以及优化错误日志的写入
修正model的数据库连接配置读取
在Ajax返回之前保存日志记录
完善compare标签
改进Vendor函数的baseUrl参数定义
改进项目语言包的定义 不同语言分成不同子目录
简化了query方法的数据库缓存
增加clearCache方法,用于清空项目相关缓存目录
增加firebird数据库驱动支持
修正pgsql驱动
修正~app.php 文件的编译缓存路径的问题
增加编译缓存路径的设置 RUNTIME_PATH

[ 1.0.0 ] 2007-12-25
优化了执行效率和内存开销
Import方法增加同名检测和类检测
完善PHP 5.2.0以下版本的支持
去掉了核心对Config、Language、Cookie和Session类库的依赖
去掉了Action类内置的默认操作
改进了MySqli的驱动类库
修正了主键不是自动增长的时候Model的add方法返回错误
修正了mysqli的escape_string方法
修正了PDO的连接params参数问题
修正了Model的findAll的关联查询问题
修正了Model类的getModelName方法问题
修正了RBAC的模块大小写设置
去掉volist resultset标签,均作为iterate标签的别名
增加了项目编译机制和核心类库编译机制
标签库定义增加标签的别名定义
XML模版结束标签增加对空格的支持
增加compare标签和eq neq gt egt lt elt heq 和nheq标签别名
增加了多模版和多语言的开关
RBAC认证增加了操作的认证设置,之前只支持模块的认证设置

THINKPHP 新手学习路线

       

一个好的框架还要配合好的学习路线,就如同去旅游一样要选择好的旅游线路。虽然学习这个东西没有定式,完全看个人情况,但是我还是尽可能可以总结出一些推荐的学习路线,希望可以适用大多数的TP初学者。如果你还不会PHP,推荐先进行PHP基础编程学习。

路线一(针对会使用PHP开发的新手)

1、查看TP的功能特性和典型应用(知道Tp的优势和用途 官方首页 案例中心  )
2、查看在线示例中心的例子(大概有个感性认识 示例中心  )
3、查看官方提供的快速入门文档(从基本开始)
4、下载完整包运行调试自带的示例中心研究(了解代码 最新下载   )
5、去官方论坛提问(针对示例不解或者有问题的地方)
6、自己尝试做一些简单例子(巩固和消化)
7、阅读官方首页提供的其他文档(心中开朗)
8、改进自己的例子(看完指南后体验新功能)
9、有把握开始做项目(真正实践)
10、遇到问题查阅官方API手册或者论坛提问
11、到官方论坛汇报BUG和建议
12、到论坛分享你的经验
13、有时间了多看看TP的源码
14、给TP贡献代码和类库(学习的成果)

几个学习守则

欲速则不达,踏实进取
戒骄戒躁、把握心态
文档很难全面官方论坛是你学习交流的最好地方
实践出真知

THINKPHP 参考资料

       
官方网站:http://www.thinkphp.cn
官方网站论坛:http://bbs.thinkphp.cn/
THINKPHP详尽开发指南:http://bbs.thinkphp.cn/viewthread.php?tid=11

附图

上传图片 

互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。如需转载,请注明来源于www.hudong.com

其他内容来源:
官方网站:
被引用: 本词条已被如下媒体引用 我来补充
开放分类: 我来补充

讨论区

更多>>

编辑者

共1人协作

相关词条

hibernate
PB
JDBC
java数据库连接
sybase
Oracle
EOS
千千静听
蓝牙
《我为WIKI狂》第11期
更多

Copyright © 2005-2009 hudong.com Ltd. All Rights Reserved. 互动在线 版权所有