【php精品源码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了php精品源码-ThinkPHP3.1 完全开发手册 - 其它资料的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
ThinkPHP3.1 完全开发手册 ThinkPHP3.1 完全开发手册版权申明发布本资料须遵守开放出版许可协议 1.0 或者更新版本。
未经版权所有者明确授权,禁止发行本文档及其被实质上修改的版本。
未经版权所有者事先授权,禁止将此作品及其衍生作品以标准(纸质)书籍形式发行。
如果有兴趣再发行或再版本手册的全部或部分内容,不论修改过与否,或者有任何问题,请联系版权所有者 liu21stgmail.com。
对 ThinkPHP 有任何疑问或者建议,请进入官方论坛 http://bbs.thinkphp.cn 发布相关讨论。
并在此感谢 ThinkPHP 团队的所有成员和所有关注和支持 ThinkPHP 的朋友。
有关 ThinkPHP 项目及本文档的最新资料,请及时访问 ThinkPHP 项目主站 http://thinkphp.cn。
本文档的版权归 ThinkPHP 文档小组所有,本文档及其描述的内容受有关法律的版权保护,对本文档内容的任何形式的非法复制,泄露或散布,将导致相应的法律责任。
卧龙吟整理,QQ:43068183 整理时间:2012 年 9 月 14 日 由在线手册整理 1 ThinkPHP3.1 完全开发手册 第 1 章 入门本章为您介绍学习 ThinkPHP 框架需要了解的基础概念和对 ThinkPHP 的概述介绍。
1.1 简介ThinkPHP 是一个免费开源的,快速、简单的面向对象的轻量级
PHP 开发框架,遵循 Apache2 开源协议发布,是为了敏捷 WEB 应用开发和简化企业应用开发而诞生的。
ThinkPHP 从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。
并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,众多的典型案例确保可以稳定用于商业以及门户级的开发。
经过 6 年的不断积累和重构,3.0 版本又是一个新的里程碑版本,在框架底层的定制和扩展方面趋于完善,使得应用的开发范围和需求适应度更加扩大,能够满足不同程度的开发人员的需求。
而且引入了全新的 CBD(核心行为驱动)架构模式,旨在打造 DIY 框架和 AOP 编程体验,让 ThinkPHP 能够在不同方面都能快速满足项目和应用的需求,并且正式引入 SAE、REST 和 Mongo 支持。
使用 ThinkPHP,你可以更方便和快捷的开发和部署应用。
当然不仅仅是企业级应用,任何
PHP 应用开发都可以从 ThinkPHP 的简单和快速的特性中受益。
ThinkPHP 本身具有很多的原创特性,并且倡导大道至简,开发由我的开发理念,用最少的代码完成更多的功能,宗旨就是让 WEB 应用开发更简单、更快速。
为此 ThinkPHP 会不断吸收和融入更好的技术以保证其新鲜和活力,提供 WEB 应用开发的最佳实践!经过 6年来的不断重构和改进,ThinkPHP 达到了一个新的阶段,能够满足企业开发中复杂的项目需求,足以达到企业级和门户级的开发标准。
ThinkPHP 遵循 Apache2 开源许可协议发布,意味着你可以免费使用 ThinkPHP,甚至允许把你基于ThinkPHP 开发的应用开源或商业产品发布/销售。
1.2 基础概念 2 ThinkPHP3.1 完全开发手册在学习和掌握 ThinkPHP 开发之前,我们有必要了解一些相关的基础概念,这样会更加便于后面内容的理解和掌握。
(以下基础概念的描述摘自互联网,仅供学习参考,更详细的说明请自行上网搜索)LAMPLAMP 是基于 Linux,Apache,MySQL 和
PHP 的开放资源网络开发平台。
这个术语来自欧洲,在那里这些程序常用来作为一种标准开发环境。
名字来源于每个程序的第一个字母。
每个程序在所有权里都符合开放源代码标准:Linux 是开放系统;Apache 是最通用的网络服务器;MySQL 是带有基于网络管理附加工具的关系数据库;
PHP 是流行的对象脚本语言,它包含了多数其它语言的优秀特征来使得它的网络开发更加有效。
开发者在 Windows 操作系统下使用这些 Linux 环境里的工具称为使用 WAMP。
虽然这些开放源代码程序本身并不是专门设计成同另外几个程序一起工作的,但由于它们都是影响较大的开源软件,拥有很多共同特点,这就导致了这些组件经常在一起使用。
在过去的几年里,这些组件的兼容性不断完善,在一起的应用情形变得更加普遍。
并且它们为了改善不同组件之间的协作,已经创建了某些扩展功能。
目前,几乎在所有的 Linux 发布版中都默认包含了这些产品。
Linux 操作系统、Apache 服务器、MySQL 数据库和 Perl、
PHP 或者 Python 语言,这些产品共同组成了一个强大的 Web 应用程序平台。
随着开源潮流的蓬勃发展,开放源代码的 LAMP 已经与 J2EE 和.Net 商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个 IT 界的关注。
从网站的流量上来说,70以上的访问流量是 LAMP 来提供的,LAMP 是最强大的网站解决方案.OOP面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。
OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。
OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。
为了实现整体运算,每个对象都能够接收信息、处理 3 ThinkPHP3.1 完全开发手册数据和向其它对象发送信息。
OOP 主要有以下的概念和组件:组件 - 数据和功能一起在运行着的计算机程序中形成的单元,组件在 OOP 计算机程序中是模块和结构化的基础。
抽象性 - 程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力。
封装 - 也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。
每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。
多态性 - 组件的引用和类集会涉及到其它许多不同类型的组件,而且引用组件所产生的结果得依据实际调用的类型。
继承性 - 允许在现存的组件基础上创建子类组件,这统一并增强了多态性和封装性。
典型地来说就是用类来对组件进行分组,而且还可以定义新类为现存的类的扩展,这样就可以将类组织成树形或网状结构,这体现了动作的通用性。
由于抽象性、封装性、重用性以及便于使用等方面的原因,以组件为基础的编程在脚本语言中已经变得特别流行。
MVCMVC 是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。
使用 MVC 应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。
视图 :视图是用户看到并与之交互的界面。
对老式的 Web 应用程序来说,视图就是由 HTML 元素组成的界面,在新式的 Web 应用程序中,HTML 依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括 Adobe Flash 和象 XHTML,XML/XSL,WML 等一些标识语言和 Web services。
如何处理应用程序的界面变得越来越有挑战性。
MVC 一个大的好处是它能为你的应用程序处理很多不同的视图。
在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为 4 ThinkPHP3.1 完全开发手册一种输出数据并允许用户操纵的方式。
模型 :模型表示企业数据和业务规则。
在 MVC 的三个部件中,模型拥有最多的处理任务。
例如它可能用象 EJBs 和 ColdFusion Components 这样的构件对象来处理数据库。
被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。
由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
控制器 :控制器接受用户的输入并调用模型和视图去完成用户的需求。
所以当单击 Web 页面中的超链接和发送 HTML 表单时,控制器本身不输出任何东西和做任何处理。
它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。
现在我们总结 MVC 的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。
ORM对象-关系映射(Object/Relation Mapping,简称 ORM),是随着面向对象的软件开发方法发展而产生的。
面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。
对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。
内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。
因此,对象-关系映射ORM系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
面向对象是从软件工程基本原则如耦合、聚合、封装的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。
为了解决这个不匹配的现象对象关系映射技术应运而生。
AOP 5 ThinkPHP3.1 完全开发手册 (Aspect-Oriented Programming,AOP , (Object-Oriented Programing, 面向方面编程) 可以说是 OOP面向对象编程)的补充和完善。
OOP 引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。
当我们需要为分散的对象引入公共行为的时候,OOP 则显得无能为力。
也就是说,OOP 允许你定义从上到下的关系,但并不适合定义从左到右的关系。
例如日志功能。
日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。
对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。
这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP 设计中,它导致了大量代码的重复,而不利于各个模块的重用。
而 AOP 技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。
所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
AOP 代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。
而剖开的切面,也就是所谓的“方面”了。
然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。
使用“横切”技术,AOP 把软件系统分为两个部分:核心关注点和横切关注点。
业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。
横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。
比如权限认证、日志、事务处理。
Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
正如 Avanade 公司的高级方案构架师 Adam Magee 所说,AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。
”CURD 6 ThinkPHP3.1 完全开发手册CURD 是一个数据库技术中的缩写词,一般的项目开发的各种参数的基本功能都是 CURD。
它代表创建(Create)、更新(Update)、读取(Read)和删除(Delete)操作。
CURD 定义了用于处理数据的基本原子操作。
之所以将 CURD 提升到一个技术难题的高度是因为完成一个涉及在多个数据库系统中进行CURD 操作的汇总相关的活动,其性能可能会随数据关系的变化而有非常大的差异。
CURD 在具体的应用中并非一定使用 create、update 、read 和 delete 字样的方法,但是他们完成的功能是一致的。
例如,ThinkPHP 就是使用 add、save、select 和 delete 方法表示模型的 CURD 操作。
ActiveRecordActive Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。
Active Record 和 Row Gateway (行记录入口)十分相似,但前者是领域模型,后者是一种数据源模式。
关系型数据库往往通过外键来表述实体关系,ActiveRecord 在数据源层面上也将这种关系映射为对象的关联和聚集。
Active Record 适合非常简单的领域需求,尤其在领域模型和数据库模型十分相似的情况下。
如果遇到更加复杂的领域模型结构(例如用到继承、策略的领域模型),往往需要使用分离数据源的领域模型,结合 Data Mapper (数据映射器)使用。
Active Record 驱动框架一般兼有 ORM 框架的功能,但 Active Record 不是简单的 ORM,正如和Row Gateway 的区别。
由 Rails 最早提出,遵循标准的 ORM 模型:表映射到记录,记录映射到对象,字段映射到对象属性。
配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。
单一入口单一入口通常是指一个项目或者应用具有一个统一(但并不一定是唯一)的入口文件,也就是说项目的所有功能操作都是通过这个入口文件进行的,并且往往入口文件是第一步被执行的。
7 ThinkPHP3.1 完全开发手册单一入口的好处是项目整体比较规范,因为同一个入口,往往其不同操作之间具有相同的规则。
另外一个方面就是单一入口带来的好处是控制较为灵活,因为拦截方便了,类似如一些权限控制、用户登录方面的判断和操作可以统一处理了。
或者有些人会担心所有网站都通过一个入口文件进行访问,是否会造成太大的压力,其实这是杞人忧天的想法。
1.3 获取 ThinkPHP获取 ThinkPHP 的方式很多,官方网站(http://thinkphp.cn)是最好的下载和文档获取来源。
从 3.1 版本开始,官方仅发布核心框架,所有扩展和示例、文档均单独在官网和 Github 上面发布。
官网下载:框架下载:http://thinkphp.cn/down/framework.html扩展中心:http://thinkphp.cn/extend.html示例中心:http://thinkphp.cn/extend/example.htmlGithub 获取地址:核心框架:https://github.com/liu21st/thinkphp扩展中心:https://github.com/liu21st/extend示例中心:https://github.com/liu21st/examples原谷歌的 SVN 不再更新。
ThinkPHP 无需任何安装,直接拷贝到你的电脑或者服务器的 WEB 运行目录下面即可。
没有入口文件的调用,ThinkPHP 不会执行任何操作。
1.4 环境要求 8 ThinkPHP3.1 完全开发手册ThinkPHP3.0 可以支持 Windows/Unix 服务器环境,需要
PHP5.2.0 以上版本支持,可运行于包括 Apache、IIS 和 nginx 在内的多种 WEB 服务器和模式,支持 Mysql、MsSQL、PgSQL、Sqlite、Oracle、Ibase、Mongo 以及 PDO 等多种数据库和连接。
框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。
ThinkPHP 底层运行的内存消耗极低,而本身的文件大小也是轻量级的,因此不会出现空间和内存占用的瓶颈。
对于刚刚接触
PHP 或者 ThinkPHP 的新手,我们推荐使用集成开发环境 WAMPServer(wampserver 是一个集成了 Apache、
PHP 和 MySQL 的开发套件,而且支持不同
PHP 版本、MySQL 版本和 Apache 版本的切换)来使用 ThinkPHP 进行本地开发和测试。
1.5 许可协议ThinkPHP 遵循 Apache2 开源协议发布。
Apache Licence 是著名的非盈利开源组织 Apache 采用的协议。
该协议和 BSD 类似,鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再作为开源或商业软件发布。
需要满足的条件:1. 需要给代码的用户一份 Apache Licence ;2. 如果你修改了代码,需要在被修改的文件中说明;3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明;4. 如果再发布的产品中包含一个 Notice 文件,则在 Notice 文件中需要带有 Apache Licence。
你可以在 Notice 中增加自己的许可,但不可以表现为对 Apache Licence 构成更改。
具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0。
1.6 目录结构 9 ThinkPHP3.1 完全开发手册新版的目录结构在原来的基础上进行了调整,更加清晰。
目录/文件 说明ThinkPHP.
php 框架入口文件Common 框架公共文件目录Conf 框架配置文件目录Lang 框架系统语言目录Lib 系统核心基类库目录Tpl 系统模板目录Extend 框架扩展目录(关于扩展目录的详细信息请参考后面的扩展章节)注意:如果你下载的是核心版本,有可能 Extend 目录是空的,因为 ThinkPHP 本身不依赖任何扩展。
1.7 命名规范使用 ThinkPHP 开发的过程中应该尽量遵循下列命名规范: 类文件都是以.class.
php 为后缀(这里是指的 ThinkPHP 内部使用的类库文件,不代表外部加载的类 库文件),使用驼峰法命名,并且首字母大写,例如 DbMysql.class.
php; 确保文件的命名和调用大小写一致,是由于在类 Unix 系统上面,对大小写是敏感的(而 ThinkPHP 在调试模式下面,即使在 Windows 平台也会严格检查大小写); 10 ThinkPHP3.1 完全开发手册 类名和文件名一致(包括上面说的大小写一致),例如 UserAction 类的文件命名是 UserAction.class.
php, InfoModel 类的文件名是 InfoModel.class.
php, 并且不同的类库的类命 名有一定的规范; 函数、配置文件等其他类库文件之外的一般是以.
php 为后缀(第三方引入的不做要求); 函数的命名使用小写字母和下划线的方式,例如 get_client_ip; 方法的命名使用驼峰法,并且首字母小写或者使用下划线 , “_” 例如 getUserName,_parseType, 通常下划线开头的方法属于私有方法; 属性的命名使用驼峰法,并且首字母小写或者使用下划线“_”,例如 tableName、_instance,通 常下划线开头的属性属于私有属性; 以双下划线“__”打头的函数或方法作为魔法方法,例如 __call 和 __autoload; 常量以大写字母和下划线命名,例如 HAS_ONE 和 MANY_TO_MANY; 配置参数以大写字母和下划线命名,例如 HTML_CACHE_ON; 语言变量以大写字母和下划线命名,例如 MY_LANG,以下划线打头的语言变量通常用于系统语言变 量,例如 _CLASS_NOT_EXIST_; 对变量的命名没有强制的规范,可以根据团队规范来进行; ThinkPHP 的模板文件默认是以.html 为后缀(可以通过配置修改); 数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如 think_user 表和 user_name 字段,类似 _username 这样的数据表字段可能会被过滤。
1特例:在 ThinkPHP 里面,有一个函数命名的特例,就是单字母大写函数,这类函数通常是某些操作的快捷定义,或者有特殊的作用。
例如,ADSL 方法等等,他们有着特殊的含义,后面会有所了解。
11 ThinkPHP3.1 完全开发手册另外有一点非常关键,ThinkPHP 默认全部使用 UTF-8 编码,所以请确保你的程序文件采用 UTF-8 编码格式保存,并且去掉 BOM 信息头(去掉 BOM 头.
上一篇:
韩sir讲php之笔记
下一篇:
企业管理论文:电力企业管理中的绩效考核工作