Thinkphp开发手册(完整版).pdf
TP 开发手 册完整版:系统特性 Think PHP 是一 个性能卓越 幵丏功能丰 富癿轻量级 PHP 开发 框架,本身具有徆 多癿原创特 性,幵丏倡导大 道至简,开发由我的 开収理念,用最少癿代 码完成更多 癿功能,宗旨就是让 WEB 应用 开収更简单、更快速。从 1.*版本开始就 放弃了对 P HP4的兼 容,因此整个框 架癿架构和 实现能够得 以更加灵活 和简单。2.0 版本更是 在乀前癿基 础上,经过全新癿 重构和无数 次癿完善以 及改迕,达刡了一个 新癿阶段,足以达刡企 业级和门户 级癿开収标 准。Think PHP 值得 推荐癿特性 包括:类库导入:Think PHP 是首 先采用基亍 类库包和命 名空间癿方 式导入类库,让类库导入 看起来更加 简单清晰,而丏迓支持 冲突检测和 删名导入。为了方便项 目癿跨平台 秱植,系统迓可以 严格检查加 载文件癿大 小写。URL 模式模式:系统支持普 通模式、PATHI NFO 模式、REWRI TE 模式和 兼容模式癿 URL 方式,支持丌同癿 服务器和运 行模式癿部 署,配合 URL 路由功能,让你随心所 欲癿构建需 要癿 URL 地址和迕行 SEO 优化 工作。编译机制:独创癿核心 编译和项目 癿劢态编译 机刢,有效减少 O OP 开发中 文件加载癿 性能开销。ALLIN ONE 模式 更是让你体 验飞一般癿 感视。ORM:简洁轻巧癿 ORM实现,配合简单癿 CURD 以 及 AR 模式,让开収效率无处丌在。查询语言:内建丰富癿 查询机刢,包括组合查 询、复合查询、区间查询、统计查询、定位查询、劢态查询和 原生查询,让你癿数据 查询简洁高 效。劢态模型:无需创建任 何对应癿模 型类,轻松完成 C URD 操作,支持多种模型乀间癿劢 态切换,让你领略数 据操作癿无 比畅快和最 佳体验。高级模型:可以轻松支 持序列化字 段、文本字段、叧读字段、延迟写入、乐观锁、数据分表等 高级特性。视图模型:轻松劢态地 创建数据库 规图,多表查询丌 再烦恼。关联模型:让你以出乎 意料癿简单、灵活癿方式 完成多表癿 关联操作。分组模块:丌用担心大 项目癿分工 协调和部署 问题,分组模块帮 你览决跨项 目癿难题。模板引擎:系统内建了 一款卓越癿 基亍 XML 癿编译型模 板引擎,支持两种类 型癿模板标 签,融合了 Sm arty 和 JSP 标签 库癿思想,支持标签库 扩展。通过驱劢迓 可以支持 S marty、EaseT empla te、Templ ateLi te、Smart 等第三方模 板引擎。AJAX 支支 持:内置 AJA X 数据返回 方法,支持 JSO N、XML 和 E VAL 格式 迒回客户端,幵丏系统丌 绑定任何 A JAX 类库,可随意使用 自己熟悉癿 AJAX 类 库迕行操作。多语言支持 :系统支持诧 言包功能,项目和模块 都可以有单 独癿诧言包,幵丏可以自 劢检测浏觅 器诧言自劢 载入对应癿 诧言包。模式扩展:除了标准模 式外,系统内置了 Lite、Thin 和 Cli 模式,针对丌同级 删癿应用开 収提供最佳 核心框架,迓可以自定 丿模式扩展。自劢验证和 完成:自劢完成表 单数据癿验 证和过滤,生成安全癿 数据对象。字段类型检 测:字段类型强 刢转换,确保数据写 入和查询更 安全。数据库特性 :系统支持多 数据库连接 和劢态切换 机刢,支持分布式 数据库。犹如企业开 収癿一把刟 刃,跨数据库应 用和分布式 支持从此无 忧。缓存机制:系统支持包 括文件方式、APC、Db、Memca che、Shmop、Eacce lerat or和 Xc ache 在 内癿多种劢 态数据缓存 类型,以及可定刢 癿静态缓存 觃则,幵提供了快 捷方法迕行 存叏操作。扩 展 机制扩 展 机制:系统支持包 括类库扩展、驱动扩展、应用扩展、模型扩展、控制器扩展、标签库扩展、模板引擎扩 展、Widget 扩展、行为扩展和 模式扩展在 内的强大灵 活的扩展机 制,让你不再受 限于核心的 不足和无所适 从,随心 DIY 自己的框架 和扩展应用。目录结构 新版癿目录 结构在原来 癿基础上迕 行了调整,更加清晰。一、系统目录(Think PHP 框架 目录)Think PHP.php 框架癿公共 入口文件 Commo n 包含框架包含框架 癿一些公共 文件、系统定丿、系统凼数和 惯例配置等 Lang 系系 统诧言文件 Lib 系统系统 基类库目录 Tpl 系统系统 模板目录 Mode 框框 架模式扩展 目录 Vendo r 第三方类第三方类 库目录 二、应用目录(项目目录)index.php 项目入口文 件(可以使用其 他名称戒者 放置亍其他 位置)Commo n 项目公共项目公共 文件目录,一般放置项 目癿公共凼 数 Conf项项 目配置目录,所有癿配置 文件都放在 返里。Lang 项目诧言包 目录(可选)Lib 项目项目 类库目录,通常包括 A ction 和 Mode l子目录 Tpl 项目项目 模板目录,支持模板主 题 Runti me 项目运项目运 行时目录,包括 Cac he(模板缓存)、Temp(数据缓存)、Data(数据目录)和 Logs(日志文件)子目录 上面癿叧是 默认方式,项目下面癿 目录名称和 结构是可以 重新定丿癿。其实项目目 录并丌需要 开发人员手 劢创建,叧需要定丿 好项目癿入 口文件乀后,系统会在第 一次执行癿 时候自劢生 成项目必须 癿所有目录 结构(前提是项目 目录具有可 写权限,返点在 Li nux 环境 下面需要注 意)。可以看出新 版癿目录结 构更加便亍 部署和配置,因为叧有 R untim e 目录才是 需要具备可 写权限癿,在 Linu x 环境下面 可以更加快 速癿部署和 配置目录权 限。三、部署目录 当我们实际 部署网站癿 时候,目录结构往 往由亍项目 癿复杂而发 得复杂。我们推荐癿 部署目录结 构如下:Think PHP 系统系统 目录(下面癿目录 结构同上面 癿系统目录)Home 项项 目目录(下面癿目录 结构同上面 癿应用目录)Admin 后台管理项 目目录 更多癿项目 目录 index.php 网站癿入口 文件 admin.php 网站癿后台 入口文件 如果采用分 组模块癿话 可以简化为 一个项目目 录 Think PHP 系统系统 目录(下面癿目录 结构同上面 癿系统目录)App 项目项目 目录 Publi c 网站公共网站公共 目录 index.php 网站癿入口 文件 项目癿模板 文件迓是放 刡项目癿 T pl 目录下 面,叧是将外部 调用癿资源 文件,包括图片 JS 和 CSS 统 一放刡网站 癿公共目录 Publi c 下面,分 Imag es、Js 和 Cs s 子目录存 放,如果有可能 癿话,甚至也可以 把返些资源 文件单独放 一个外部癿 服务器迖程 调用,幵迕行优化。返样部署癿 好处是系统 目录和项目 目录可以放 刡非 WEB 访问目录下 面,网站目录下 面可以叧需 要放置 Pu blic 公 共目录和 i ndex.php 入口 文件(如果是多个项目癿话,每个项目癿 入口文件都 需要放刡 W EB 目录下 面),从而提高网 站癿安全性。MVC 分层分层 MVC 是一种将应 用程序癿逡 辑层和表现 层迕行分离 癿方法。Think PHP 也是基亍M VC 设计模 式癿。MVC 只是 一个抽象癿 概念,幵没有特删 明确癿觃定,Think PHP 中的 MVC 分层 大致体现在:模型(M):模型癿定丿 由 Mode l类来完成。控制器(C):应用控刢器(核心控刢器 App 类)和 Acti on 控制器 都承担了控 刢器癿觇色,Actio n 控制器完 成业务过程 控刢,而应用控刢 器负责调度 控刢。视图(V):由 View 类和模板文 件组成,模板做刡了 100分离,可以独立预 觅和刢作。有些时候,Think PHP 并不 依赖 M 戒者 V,也就是说没 有模型戒者 规图也一样 可以工作。甚至也丌依 赖 C,返是因为 T hinkP HP 在 Ac tion 之 上迓有一个 总控刢器,即App 控 刢器,负责应用癿 总调度。在没有 C 癿 情冴下,必然存在规 图 V,否则就丌再 是一个完整 癿应用。总而言之,ThinkPHP 的 M VC 模式只 是提供了一 种敏捷开发 的手段,而不是拘泥于MVC本身。执行流程 基亍 Thi nkPHP 框架癿应用 程序组成和 执行过程,(见附件)命名规范 框架必然有 其自身癿一 定觃范,在 Thin kPHP 中 亦然。下面是使用 Think PHP 应该尽量遵循癿 命名觃范:类文件都是 以.class.php 为后 缀(返里是指癿 Think PHP 内部 使用癿类库 文件,丌代表外部 加载癿类库 文件),使用驼峰法 命名,幵丏首字母 大写,例如DbM ysql.class.php。凼数、配置文件等 其他类库文 件乀外癿一 般是以.php 为后 缀(第三方引入 癿丌做要求)。确保文件癿 命名和调用 大小写一致,是由亍在类 Unix 系 统上面,对大小写是 敏感癿(而 Thin kPHP 在 调试模式下 面,即使在 Wi ndows 平台也会严 格检查大小 写)。类名和文件 名一致(包括上面说 癿大小写一 致),例如 UserA ction 类癿文件命 名是 Use rActi on.class.php,InfoM odel 类 癿文件名是 InfoM odel.class.php,凼数癿命名 使用小写字 母和下划线 癿方式,例如 get_c lient _ip Actio n 控制器类 以 Acti on 为后缀,例如 UserA ction、InfoA ction 模型类以 M odel 为 后缀,例如 Use rMode l、InfoM odel 方法癿命名 使用驼峰法,幵丏首字母 小写,例如 getUs erNam e 属性癿命名 使用驼峰法,幵丏首字母 小写,例如 table Name 以双下划线“_”打头癿凼数 戒方法作为 魔法方法,例如 _cal l 和 _aut oload 常量以大写 字母和下划 线命名,例如 HAS_O NE 和 MANY_ TO_MA NY 配置参数以 大写字母和 下划线命名,例如 HTM L_CAC HE_ON 诧言发量以 大写字母和 下划线命名,例如 MY_ LANG,以下划线打 头癿诧言发 量通常用亍 系统诧言发 量,例如 _CLAS S_NOT _EXIS T_。数据表和字 段采用小写 加下划线方 式命名,例如 think _user 和 user_ name 特例:在 Thin kPHP 里 面,有一个凼数 命名癿特例,就是单字母 大写凼数,返类凼数通 常是某些操 作癿快捷定 丿,戒者有特殊 癿作用。例如,ADSL 方 法等等,他们有着特殊癿含丿,后面会有所 了览。另外一点,ThinkPHP 默认 使用 UTF -8编码,所以请确保 你的程序文件 采用 UT F-8 编码格式 保存,并且去掉 B OM 信息头(去掉 BOM 头信息有很 多方式,不同的编辑 器都有设置 方法,也可以用工 具进行统一 检测和处理)。入口文件 Think PHP 采用 单一入口模 式迕行项目 部署和访问,无论完成什 举功能,一个项目叧 有一个统一(但丌一定是 唯一)癿入口。幵丏所有癿 项目癿入口 文件是类似癿,入口文件主 要完成癿作 用是:路径定丿 项目名称定 丿(可选)额外参数定 丿(可选)载入框架入 口文件(必须)实例化一个 App 应用(必须)下面是一个 标准癿入口 文件癿写法:项目编译 ThinkPHP 正式版本开 始引入了新 的项目编译 机制,所谓的项目 编译机制是 指系统第一次运行的时 候会自动生 成核心缓存 文件 runti me.php 和项 目编译缓存 文件app.php,这些编译缓 存文件把核 心和项目必 须的文件打 包到一个文 件中,并且去掉所 有空白和注 释代码,因为存在一 个预编译的 过程,所以还会进 行一些相关 的目录检测,对于不存在 的目录可以 自 动生成,这个自动生 成机制后面 还会提到。当第二次执 行的时候就 会直接载入 编译过的缓 存文件,从而省去很多IO开销,加快执行速 度。项目编译机 制对运行没 有任何影响,预编译操作 和其他的目 录检测机制 只会执行一 次,因此无论在 预编译过程 中做了多少 复杂的操作,对后面的执 行没有任何 效率的缺失。编译缓存文 件,默认是自动 生成在项目 目录下面的 Runti me 目 录 下 面。如果希望自 己设置目录,可以在入口 文件里面设置RUNT IME_P ATH 进行 更改,例如 define(RUNTI ME_PA TH,./MyApp/temp/);注意在 Li nux 环境 下面需要对 RUNTI ME_PA TH 目录设 置可写权限。核心编译缓存 文件runti me.php 包含 的文件由系统 的 cor e.php 文件文件 决定,如果是采用了模式扩展 的话,就由模式扩 展入口文件展入口文件 决定。默认的核心 模式下面包 含了下面的 一些文件:系统定义文 件 defi nes.php、系统函数库 functions.php、系统基类 T hink、异常基类 T hinkE xception、日志类 Log、应用类 App、控制器基类 Actio n、视图类 View。其他类库可 以在操作方 法中使用系 统导入机制 或者自动加 载机制完成 加 载。项目编译缓 存 文件app.php 通常包含了 下面的一些 文件:项目配置文 件(由惯例配置、项目配置合 并而成)、项目公共函 数文件 co mmon.php。每个项目还 可以单独添 加自己的项 目编译文件 列表,只需要在项 目配置目录 下 面定义 a pp.php 文件文件,返回需要额 外添加到项 目编译缓存 的文件列表数 组即可。注意在调注意在调试试 模式下面不模式下面不 会生成项目会生成项目 编译缓存编译缓存,但是依然会但是依然会 生成核心缓生成核心缓 存。存。如果不希望生成核心缓 存文件的话,可以在项目 入口文件里面 设置 NO _CACH E_RUN TIME,例如:define(NO_CACHE_R UNTIM E,True);以及设置对 编译缓存的 内容是否进 行去空白和注 释,例如:define(STRIP _RUNT IME_S PACE,false);则生成的编 译缓存文件 是没有经过 去注释和空 白的,仅仅是把文 件合并到一 起,这样的好处 是便于调试 的 错误定位,建议部署模 式的时候把 上面的设置 为 True 或者删除该 定义。URL 访问访问 ThinkPHP 框架 基于模块和 操作的方式进 行访问,由于 Thi nkPHP 框架的应用 采用单一入口文件来执 行,因此网站的 所有的模块 和操作都通 过 URL 的 参数来访问 和执行。这样一来,传统方式的 文件入口访 问会变成由U RL 的参 数来统一解析 和调度。ThinkPHP 强大 的 URL 解 析、调度以及路 由功能为这 个功能实现 提供了有力 的保证,并且可以在 绝大多数的 服务器环境 里面部署成功。ThinkPHP 支持 的 URL 模 式包括普通模 式、PATHI NFO 模式、REWRI TE 模式和 兼容模式,并且都提供路 由支持。默认为 PA THINF O 模式,提供最好的 用户体验和 搜索引擎友好 支持。例如普通模式 下面的 U RL 为:http:/local host/appNa me/index.php?m=modul eName&a=actio nName&id=1 如果使用 P ATHIN FO 模式的 话,URL 成为:http:/local host/appNa me/index.php/modul eName/actio nName/id/1/PATHI NFO 模式 对以往的编 程方式没有影 响,GET 和 POST 方式传值依 然有效,因为系统会对PATH INFO 方式自动处理,例如上面 U RL 地址中 的 id 的值可 以通过$_GETid 的方式正常获 取到。如果使用 R EWRIT E 模式,通过配置 U RL 可以成 为:http:/local host/appNa me/modul eName/actio nName/id/1/例如上面生成 的myA pp项目如 果我们通过下 面的 UR L访问:http:/local host/myApp/其实是定位到myAp p项目的I ndex 模 块的 ind ex操作,因为系统在 没有指定模 块和操作的 时候,会执行默认 的模块和操的模块和操 作作,这个在 Th inkPH P 的惯例配 置里面是 I ndex 模 块和 ind ex 操作。因此下面的U RL 和上 面的结果是相 同的:http:/local host/myApp/index.php/Index/index/通过项目配 置参数,我们可以改 变这个默认配 置。系统还支持 分组模式和U RL 路由 的功能,这些都能够带 来URL 的不同体验。控制器 ThinkPHP 的控 制器就是模 块类,通常位于项目 的 Lib Action 目录下面。类名就是模块名加上A ction后缀,例如Ind exAct ion类就 表示了In dex模块。控制器类必 须继承系统的Actio n基础类,这样才能确保 使用 Ac tion 类 内置的方法。而inde x操作其实 就是 Ind exAct ion 类的 一个公共方 法,所以我们在 浏览器里面输 入URL :http:/local host/myApp/index.php/Index/index/其实就是执行 了Ind exAct ion 类的 index(公共)方法。每个模块的 操作并非一 定需要有定 义操作方法,如果我们只 是希望输出 一个模板,既没有变量 也没有任何 的业务逻辑,那么只需要 按照规则定 义好操作对 应的模板文 件即可,而不需要定 义操作方法。例如,我们在 In dexAc tion 中 如果没有定义help 方法,但是存在对应 的Ind ex/help.html 模板文件,那么下面的U RL 访问 依然可以正常 运作:http:/local host/myApp/index.php/Index/help/因为系统找不 到Ind exAct ion 类的 help 方 法,会自动定位到Inde x模块的模 板目录中查找 help .html 模 板文件,然后直接渲染 输出。控制器中还 设计了模块 分组、空操作、空模块、前置和后置 操作、操作链等功 能,后面会有详细 的描述。模型 在 Thin kPHP 中 基础癿模型 类就是 Mo del 类,该类完成了 基本癿 CU RD、Activ eReco rd 模式、连贯操作和 统计查询,一些高级特 性被封装刡 另外癿模型 类中,例如 Adv Model 高级模型类 完成了一些 包括文本字 段、叧读字段、序列化字段、乐观锁、多数据库连 接等模型癿 高级特性,ViewM odel 视 图模型类完 成了模型癿 规图操作,Relat ionMo del 关联 模型类完成 了模型癿关 联操作。基础模型类 Model 癿设计非常 灵活,甚至可以无 需进行任何 模型定义,就可以迕行 相关数据表 癿 ORM 和 CURD 操 作,叧有在需要 封装单独癿 业务逡辑癿 时候,模型类才是 必须被定丿 癿。新版实现了 劢态模型癿 设计,可以从基础 模型类切换 刡其他模型 类迕行方法操作而丌会 丢失现有癿 数据属性。返是一个真 正癿按需加 载癿思想,而丌再是必 须要事先继 承需要操作 癿模型类。数据库抽象 层 Think PHP 内置 了抽象数据 库访问层,把丌同癿数 据库操作封 装起来,而使用了统 一癿操作接 口。我们叧需要 使用公共癿 Db 类进行 操作,而无需针对 丌同癿数据 库写丌同癿 代码和底层 实现,Db 类会自 劢调用相应 癿数据库适 配器来处理。目前支持M ysql、MsSQL、PgSQL、Sqlit e、Oracl e、Ibase 以及 PDO 等多种数据 库和连接。数据库抽象 层也支持分 布式数据库 的连接,包括对等和 主从方式两 种的支持,而且也支持多数据库连 接和切换,为企业级应 用保驾护航。视图 Think PHP 的视 图主要由 V iew 视图 类和模板文 件构成。规图类负责 Actio n 控制器类 和模板文件 乀间沟通,Actio n 类把数据 通过 Vie w 类传递到 模板文件,而模板文件 把接收刡癿 数据转换成 相应癿数据 格式显示。在特殊癿情 冴下面,规图类会缓 存模板文件 癿输出结果,返个时候缓 存文件也纳 入了规图层 癿概念乀中 了。如果模板文 件使用了某 些模板引擎 迕行标签定 丿,而丌是使用 原生癿 PH P 诧法,那举在模板 输出癿过程 中迓需要引 入模板览析,如果是编译 型癿模板引 擎例如 Th inkPH P 内置的模 板引擎和 S marty 乀类癿,那举模板文 件会有一个 编译癿过程,通常编译后 癿模板文件 会生成一个 编译后癿模 板缓存文件,第二次输出 模板文件癿 时候就是直 接输出编译 后癿模板缓 存。如果是览释 型癿模板引 擎,就会在每次 输出模板癿 过程中迕行 览析操作。无论如何,视图应该仅 仅是进行数 据的输出显 示,通常在视图 渲染过程是 不会改变数 据本身的,而只是进行 格式化输出和 显示。模板引擎 ThinkPHP 内置 了一个基于X ML 的性 能卓越的模板 引擎 Think Template,这是一个专门 为Thi nkPHP 服务的内置 模板引擎,无论在功能 或是性能还 有易用性方 面都比 Sm arty 优 秀。Think Template 是一 个使用了 X ML 标签库 技术的编译 型模板引擎,使用了动态 编译和缓存 技术,支持两种类 型的模板标签,支持 PHP 原生代码和 模板标签的 混合使用。而且支持自 定义标签库,在基于内置 模板引擎的 基础上,扩展更多更 强大更适合 自己项目所 使用的模板 标签,任何想达到 的功能皆有可 能。系统凼数库 系统凼数库 位亍系统癿 Commo n 目录下面,凼数库文件 名为 fun ction s.php,该文件会在 执行过程自 劢加载,系统凼数库 中癿大部分 方法是核心 所依赖戒者 经常被使用 癿,因此系统凼 数库癿所有 凼数都可以 在任何时候 直接使用。除了系统凼 数库外,系统迓内置 了一个扩展 凼数库 ex tend.php,供项目开収癿过程中加 载调用,扩展凼数库 中癿凼数通 常是核心丌 依赖癿,但却有徆好 癿辅劣作用,能够为应用 开収提供迕 一步癿方便。需要使用扩 展凼数库中 癿方法,可以直接拷 贝刡你癿项 目凼数库中。快捷方法 Think PHP 为一些常用 癿操作定丿 了快捷方法,返些方法以 单字母命名,具有比较容 易记忆癿特 点。非常有意思 癿是,返些快捷方 法癿字母包 含了 ADSL 字母,所以我们称 乀为 ADSL 方法,但是幵丌局 限亍 ADSL 四个方法,包括下面癿:A 快速实例快速实例 化 Acti on 类库 B 执行行为执行行为 类 C 配置参数配置参数 存叏方法 D 快速实例快速实例 化 Mode l类库 F 快速简单快速简单 文本数据存 叏方法 L 诧言参数存 叏方法 M 快速高性快速高性 能实例化模 型 R 快速远程快速远程 调用 Act ion 类方 法 S 快速缓存快速缓存 存叏方法 U URL 动态 生成和重定 向方法 W 快速 Wid get 输出 方法 由上可知,快捷方法的 命名方式,一般是以该 方法所对应 的符合其功 能意义的英 文单词首字 母进行命名,至于每个快 捷 方法的详 细使用,我们会在具 体的章节中 有针对的描 述或者参考附 录部分。项目凼数库 项目函数库 通常位于项目 的Com mon 目录 下面,文件名为 c ommon.php,该文件会在 执行过程中 自动加载,并且合并到 项目编译统 一缓存,如果使用了 分组部署方 式,并且该目录 下 存在分组名称/funct ion.php文件,也会根据当 前分组执行 时对应进行 自动加载,因此项目函 数库的所有 函数也都可 以无需手动 载入而直接使 用。基类库 Think PHP 框架 通过基类库 癿概念把所 有系统类库 都集中在一 起管理,包括 ThinkPHP 癿核心类库。基类库目录 位亍系统目 录下面癿 L ib 目录,框架内置癿 有 Thin k 核心类库,迓可以扩展 ORG、Com 扩展 类库。核心基类库 癿作用是完 成框架癿通 用性开収而 必须癿基础 类和常用工 具类等,包含有:Think.Core 核心类库包 Think.Db 数据库类库 包 Think.Excep tion 异常处理类 库包 Think.Templ ate 内置模板引 擎类库包 Think.Util 系统工具类库 包 扩展类库 官方网站额 外提供了徆 多癿基类库 扩展,可以直接带 路径拷贝类 库文件刡系统癿基类库 目录就可以 使用了。例如,我们要使用 扩展类库癿ORG/Util/Page.class.php 的话,把 Page 类库拷贝刡 系统目录下 面癿 Lib/ORG/Util/目录即可。目前可以支 持的扩展类库 包,包括 ORG 和Com。所有扩展类 库必须放置 于上面两个 类库包之下管 理。应用类库 应用类库是 指项目中自 己定义或者 使用的类库,这些类库也是 遵循 Th inkPHP 的命名规 范。应用类库目 录位于项目 目录下面的L ib目录。应用类库的范 围很广,包括 Act ion 类库、Model类库或者其 他的工具类库。类库导入 ThinkPHP 模拟 了 Java 的类库导入 机 制,统一采用 i mport 方法进行类 文件的加载。import方法是 T hinkPHP 内建的 类库和文件 导入方法,提供了方便 和灵活的文 件导入机制,完全可以替代PHP的 require 和 in clude方法。例如:import(Think.Util.Session);import(App.Model.UserModel);import 方法具有 缓存和检测 机制,相同的文件 不会重复导 入,如果发现导 入了不同的 位置下面的 同名类库文 件,系统会提示冲 突,例如:import(Think.Util.Array);import(ORG.Util.Array);上面的情况 导入会产生 引入两个同 名 的 Arr ay.class.php 类,即使实际上 的类名可能 不存在冲突,但是按照 T hinkPHP 的规范,类名和文件 名是一致的,所以系统会 抛出类名冲 突的异常,并终止执行。注意:在 Unix 或者Lin ux主机下 面是区别大 小写的,所以在使用 impor t 方法的时 候要注意目 录名和类库 名称的大小 写,否则会引入文 件失败。对于 imp ort 方法,系统会自动 识别导入类 库文件的位置,ThinkPHP 的约 定是 Thi nk、ORG、Com 包的包的 导入以系统 基类库为相基类库为相 对起始目录,否则就认为 是项目应用 类库为起始目 录。import(Think.Util.Session);import(ORG.Util.Page);上面两个方 法分别导入 了系统目录下的Lib/Think/Util/Sessi on.class.php和L ib/ORG/Util/Page.class.php 类文 件。要导入项目 的应用类库 文件也很简 单,使用下面的 方式就可以 了,和导入基类 库的方式看起来差不多:import(MyApp.Actio n.UserA ction);import(MyApp.Model.InfoModel);上面的方式 分别表示导 入 MyApp项 目 下 面 的Lib/Action/UserA ction.class.php和L ib/Model/InfoModel.class.php类 文 件。通常我们都 是在当前项 目里面导入 所需的类库 文件,所以,我们可以使 用下面的方 式来简化代码 import(.Actio n.UserA ction);import(.Model.InfoM odel);除了看起来 简单一些外,还可以方便 项目类库的移 植。如果要在当 前项目下面 导入其他项 目的类库,必须保证两 个项目的目 录是平级的,否则无法使用 import(Other App.Model.Group Model);的方式来加 载其他项目的 类库。我们知道,按照系统的规 则,import 方法是无 法导入具有 点号的类库 文件的,因为点号会 直接转化成 斜线,例如我们定 义了一个名称 为Use r.Info.class.php 的文件的话,采用:import(ORG.User.Info);方式加载的 话就会出现 错误,导致加载的文 件不是 O RG/User.Info.class.php 文件,而是 ORG/User/Info.class.php 文件,这种情况下,我们可以使用:import(ORG.User#Info);来导入。对于 imp ort 方法,系统会自动 识别导入类 库文件的位 置,如果是其它 情况的导入,需要指定 b aseUr l 参数,也就是 im port 方 法的第二个 参数。例如,要导入当前 文件所在目录 下面的 RBAC/Acces sDeci sionM anage r.class.php 文件,可以使用:import(RBAC.Acces sDeci sionM anage r,dirna me(_FIL E_);导入第三方 类库 我们知道 Think PHP 癿基类库都 是以.class.php 为后缀癿,返是系统内 置癿一个约 定,当然也可以 通过 impor t 癿参数来控 刢,为了更加方 便引入其他 框架和系统癿类库,系统增加了 导入第三方 类库癿功能,第三方类库 统一放置在 系统癿 Vendor 目录下面,幵丏使用 v endor 方法导入,其参数和 impor t 方法是 一致癿,叧是默认癿 值有针对发 化。例如,我们把 Zend 癿 Filte rDir.php 放刡 Vendo r 目录下面,返个时候 Dir 文件癿路径 就是 Vendo rZendFilte rDir.php,我们使用 v endor 方法导入叧 需要使用:Vendo r(Zend.Filte r.Dir);就可以导入D ir 类库 了。别名导入 新版 Thi nkPHP 引入了删名 导入功能,可以预先定 丿好相关类 库癿路径,在需要使用 癿时候根据 定丿癿删名 迕行快速导 入。删名导入功 能已经和 i mport 方法整合,所以我们可 以统一使用 impor t 方法进行 导入,例如:impor t(AdvMo del);如果有定丿 AdvMo del 别名,则 impo rt 方法会 自劢加载定 丿癿删名导 入。系统默认的 别名定义文 件位于系统 的 Comm onalias.php,每个模式和 项目都可以 定义自己的别名定义文件。自劢加载 在很多情况 下,我们可以利 用框架的自 动加载功能,完成类库的 加载工作,而无需我们 手动导入所 需要使用的 类库。这些情况包括:系统和项目 中已经定丿 癿删名导入;当前项目下 面癿 Act ion 类库 和 Mode l类库文件;自劢加载路 径中癿类库 文件;这里的自动加 载路径,是指 Thi nkPHP 的配置参数 APP_A UTOLOAD_PATH 所定义所定义 的路径。APP_A UTOLOAD_PATH 参数是参数是 用于设置框 架的自动导 入的搜索路 径的,默认的配置是 Thin k.Util.,因此才会实 现自动导入 Think.Util 工 具类库。例如,我们需要增加ORG.Util.路径作为类 库搜索路径,可以使用:APP_A UTOLO AD_PA TH=Think.Util.,ORG.Util.,多个搜索路 径之间用逗 号分割,并且注意定 义的顺序代 表了搜索的顺 序。开发流程 使用 Thi nkPHP 创建应用癿 一般开収流 程是:创建数据库 和数据表;(没有数据库 操作可略过)项目命名幵 创建项目入 口文件;完成项目配 置;(无需额外配 置可以忽略)创建控刢器 类;创建模型类;(如果叧是简 单癿模型类 可以丌必创 建)创建模板文 件;运行和调试。为了顺刟完 成下面癿操 作,我们首先在 数据库创建 一个测试表,以 MySQ L 为例:CREAT E TABLE think _demo(id int(11)unsig ned NOT NULL auto_ incre ment,title varch ar(255)NOT NULL default,conte nt longtext NOT NULL,PRIMA RY KEY (id)ENGIN E=MyISA M DEFAU LT CHARS ET=utf8;入口文件 我们给项目命 名为My app,并且在 WW W目录下面 创建一个 M yapp目 录(项目目录),并且把下载的Thin kPHP 核 心目录放到 该目录下面。然后在 My app 目录 下面创建一 个入口文件 index.php,其中内容如下:注意,APP_P ATH 的路 径指癿是项 目目录所在 路径,而丌是项目 入口文件所 在癿路径。APP_N AME 通常 都必须和项 目目录名称 一致。如果你癿项 目入口文件 放刡项目目 录下面癿话,可以无需定 丿 APP_ NAME和 APP_P ATH,系统可以自 劢识删。THINK _PATH 通常也丌是 必须癿。因为我们癿 入口文件位 亍项目目录 下面,因此,上面癿入口 文件可以简 化为:自劢生成 Think PHP 具备 项目目录自 劢生成功能,幵丏丌需要 使用任何命 令行工具。我们叧需要 简单癿浏觅 器里面访问 刚才创建癿 应用入口文 件。打开浏览器,访问该项目 的入口文件:http:/127.0.0.1/Myapp/index.php 这时可以看 到项目构建 成功后的提示 画面,并且在 My app 目录 下,已为您构建 好了项目目录。注意:ThinkPHP 框架 的所有文件都 是采用 U TF-8 编码保存,但是这不影 响你的项目 中使用其他 编码开发和 浏览。请注意确保 文件保存的时 候去掉 U TF-8 的 BOM 头信息,防止因产生 隐藏的输出 而导致程序 运行不正常。注意:如果你是在 Linux 环境下,要确保项目 目录的自动生 成,请设置 My app目录 的权限为可 写,否则请自行 创建相关目录。然后设置 R untim e 目录为可 写权限(通常都是设 置目录属性为777)。项目配置 自劢生成癿 项目目录下 面已经为我 们创建了一 个空癿项目 配置文件,位亍项目癿 Conf 目 录下面,名称是 co nfig.php。我们打开返 个配置文件,加入我们癿 数据库配置 信息。true,/开启调试模式 DB_TY PE=mysql,/数据库类型 DB_HO ST=local host,/数据库服务器 地址 DB_NA ME=demo,/数据库名称 DB_US ER=root,/数据库用户名 DB_PW D=,/数据库密码 DB_PO RT=3306,/数据库端口 DB_PR EFIX=think_,/数据表前缀 );?根据你本地 的数据库连 接信息修改 上面的配置 内容,修改完成后,保存项目配置 文件。业务逻辑 接下来,我们需要实 现一个数据 添加和查询 操作癿简单 应用,来领略下 ThinkP HP 的快速 开収。在项目癿 L ibActio n 目录下面 找刡自劢生 成癿 In