|
下面刊发演讲全文,根据演讲稿原文整理。
下面的内容与 PPT 同步。
先附上 PPT:
2011PHP技术高峰论坛演讲.黄波.ppt
(672 KB, 下载次数: 508)
(登录后下载)
PPT[1]:大家下午好,我是来自 CI 中国社区的黄波。今天 CI 中国社区为本次峰会准备的主题是《CodeIgniter 那些事》,所讲的内容是基于 CI 的最新版本 2.0.2。
PPT[2]:CodeIgniter 是什么?官方网站上有一段,太长,英文就不念了。CI 是一个 PHP 框架。轻量、强大、文档齐全、开发快速。再简单一点说:如果你是 PHP 程序员,遇到 CI 你就有福了。CI 的使用许可协议:自由使用,在必要的地方保留 CI 的版权信息和使用许可协议,未得到书面授权的情况下软件名字不要带有 CodeIgniter 的字眼,风险自担,这个大家都能理解。其实也不会有什么风险,不会把数据弄丢也不会把服务器搞死机。
PPT[3]:CodeIgniter 的背景。CI 最开始是由 Rick Ellis 开发的,他曾经是一个摇滚音乐家,现在是一名程序员。呵呵,这样一个摇滚歌手会是什么样的性格?他改行做程序员,可以想象他写出来的代码也会和科班的程序员有所不同。当年由于 Ellis 未能找到一个简单的 PHP 框架,健壮、易于使用、文档完整,包含建立一个完整应用需要的所有工具,并且有一个以浏览器为基础的界面,使用普通用户权限就能安装。没有别的原因,就是“市场需要”这个单一的原因促使我想开发这样一个框架产品。文档不全或质量很差。他们假定你水平很高,希望你能很容易地掌握使用方法。他们是为那些有超级用户权限,或者有权修改服务器设置的人写的。他们假定你偏爱命令行操作,事实上许多人无此爱好。偏爱使用 PEAR 类库或其它开源类库。模板语法过于复杂。有的太笨重,有的又太简单。其实还有一点“大多数框架只能在 PHP 5 中运行,只有 5% 的使用率。”,没什么好苛求,时代不一样了,当年 PHP 的招牌之一就是嵌入到 HTML 代码里运行,现在应该没人鼓励这么做了,都在强调逻辑与表现分离。可以说CI向PHP5的迁移还不是很彻底,但即使是PHP4时代,CI所体现的程序构架思想一点都不落后。我们稍后会讲到。
PPT[4]:CI 的特点。官方网站上有一个“20分钟开发一个博客”的视频连接。这就够了,一切尽在不言中。其实看过这个视频的人就知道,视频的录制者是标准的欧美教学风格,慢而易懂。如果只是为了实现博客这个功能的话,会更快。所以,我们就不去纠结 20 分钟是不是足够快的问题了。
PPT[5]:学习 CI。由于 CI 的种种优点,小巧、文档齐全,学习 CI 毫无疑问对大家来说没难度。动手之前先看手册,开发过程遇到使用问题还是先看手册。手册搞不定就去看代码,学习开源的软件不看代码简直就是奢侈、浪费。社区是交流学习成果的地方,欢迎各种讨论,而且经常会有热帖,像 Cache 功能是否有bug,等等。但是对于基础知识,个人建议与其等上几个小时或者几天等人解决还不如自己亲历亲为的看手册、啃源代码,毕竟技术社区不是托儿所或者是从零开始教学的培训班。从项目中学习,读万卷书,行万里路,只是学习不实践没有用,自己开发一个基于CI的项目或者参与到社区的开源项目中去,会让新学CI的人有获得实质的能力提高。现在CI中国社区有两个开源项目:STBlog、DiliCMS
PPT[6]:从 CI 中学习。学习使用CI太简单,既然大家都能自己学好,我在这里还说如何学习使用 CI 就没太多意思了。使用 CI 开发,是 CI 的价值之一,这仅仅是处在使用CI框架的层面;学习 CI 的开发思想用在自己的软件构架中去,这是 CI 作为开源项目更深层次的价值。在大部分场合,PHP 程序员直接使用 CI 高效、快捷的开发 PHP 应用程序;但在一些特殊场合,若需要直接 PHP 开发,了解 CI 的开发思想会给项目开发实质性的帮助,顺利实现软件架构。
PPT[7]:CI 的构架。这是CI手册上的一节:Design and Architectural Goals(设计和架构的目标);Our goal for CodeIgniter is maximum performance, capability, and flexibility in the smallest, lightest possible package(这是开发 CI 框架的指导思想尽可能小的发行包实现高效性、兼容性和灵活性)。特性:dynamically instantiated(按需动态加载资源);loosely coupled(松耦合,各类库之间的依赖很少);high component singularity(组件功能的专一性、原子化)
PPT[8]:CI 的构架。MVC、单入口文件、应用与系统文件的分离、高可扩展性、支持多种数据库平台。CI包含了有购物车, Email, 文件上传, FTP, 图片处理等等、丰富的以实现应用特定功能为目的的功能类算不算是一个特点?这些只是为了便于用户开发而准备的工具类,加上前面所提到的松耦合和功能原子化的理念,类似的功能类在项目中可以根据功能需求临时添加。虽然是 CI 的特色之一,但是和程序构架没太大关系。
PPT[9]:CI 的构架-MVC。Model:和各种数据源打交道,包含但不限于数据库的数据,建立数据源与php变量的关联。View:表现给用户看的内容,CI使用的是原生态的php作为html模板,效率很高。Controller:处理业务逻辑,协调Model的工作,支持View的工作,以实现业务请求。
PPT[10]:CI 的构架-单入口文件。对所有请求都能有效的初始化所需资源,包括安全处理。CI并不是强制的只有一个文件,而是一个应用程序只有唯一的入口。两个独立的应用使用两个入口,设置不同的配置、使用不同的应用程序是正常的,同时也便于在未来将web应用分离到多个物理服务器上。CI中index.php文件的第一个PHP语句设置就是当前所在的运行环境。最直接的影响就是错误提示的级别不一样,通过一个开关快速切换开发环境和生产环境。
PPT[11]:CI 的构架-应用与系统文件的分离。应用程序放在单独的目录下,系统文件的升级对应用的影响尽可能小。早期版本 application 是放在 system 目录之下的,但是一般我个人会通过在 index.php 的设置,把 application 放到 system 外面。application 文件夹的目录设置有点类似于 system 文件夹目录的设置,比如 core, helpers, libraries,我们下面会说到。
PPT[12]:CI 的构架-可扩展性(文件)。扩展方式,创建全新的;扩展原始的 前缀MY_;替换原始的 前缀CI_;应用程序文件夹里的类拥有更高的优先级,代码里设置的一些变量会有更高的优先级,而系统文件文件夹下面的类基本上是为实现基础功能而不得不上阵的一批。CI 框架的自身大部分组件可以被扩展。Library, Core class;创建全新、扩展原始、替换原始均可。Drivers;可创建新驱动。Helpers;函数形式存在,确定尚未被定义再定义该函数,所以只能扩展,不能替换原始 helper。CI的高可扩展性是对低耦合和功能原子化理念的完美实践。
PPT[13]:CI 的构架-CI 的可扩展性(Hooks)。在不修改 CI 系统文件的情况下运行自己所需的函数或方法以实现修改CI工作流程的目的,需要配置开启 hook。以下为钩子的插入点:pre_system、pre_controller、post_controller_constructor、post_controller、display_override、cache_override、post_system。
PPT[14]:CI 的构架-支持多种数据库平台。MySql、Postgre、MSSql、OCI、ODBC、SqLite。让业务逻辑代码和数据库平台分离,即变更数据库平台时不会造成太多业务逻辑代码,即 PHP 代码的修改,PHP 自身也希望实现此目标,引入了 PDO。
PPT[15]:CI 的工作流程。这个是官方手册上给出的,老图,目前plugin 已经被撤掉,转化为 helper 或者其他了。有些功能不是很强大,比如 Cache,但是给的一个思想是在web程序中Cache机制的必要性,PHP能使用的缓存机制很多,各个级别的都有,在此不做深入讨论。
PPT[16]:CI框架体现的web程序的要素。刚才给出的流程图中直接体现了一些要素,MVC、Security、cache、libraries、helpers等等,以下是没有上图未出现的要素却贯穿了整个CI的运行。可配置性。配置参数仅次于环境参数和请求参数被传递给应用程序,易管理的配置机制很重要,CI 采用配置类和配置文件管理方式让此得以实现。调试、测试、性能优化。CI 的系统文件里到处可见log语句,而在Hook机制中,第一个钩子的位置是在Benchmark被调用之后,也就是说CI实例化的第一个类是Benchmark,Benchmark的设置也是随处可见。
PPT[17]:Just do IT。这是 CI 的作者,摇滚出身,不满于 PHP 框架的当时的现状而写出如此优秀的框架。我自己也不是科班出身,本科学的是应用物理、之后做的是网络运营、现在是程序员。但是我很喜欢自己当前的工作,它让我很快乐。所以这是我最后要送给大家的,Just do IT(Information Technology)。
PPT[18]:Thank you! |
|