php框架基础(《PHP 框架 CodeIgniter 3》第一章 CodeIgniter 简介)PHP基础 / PHP基础CodeIgniter框架...

wufei123 发布于 2024-07-01 阅读(5)

大多数 PHPer 都想写出优秀的应用程序,而且希望尽可能做得简单且不费事这本书是有关 CodeIgniter 的(以下简称 CI),CI 是一个可以让你达成以上目标的框架如果你只是要达成一个最终的结果,而把中间所有的编程细节和复杂统统丢给一个框架,CI 是你最好的朋友。

CI 有很多优点:免费,轻量级,容易安装,他能使你的编程生涯变得很轻松 这一章我们会告诉你:CI 能为你做什么?什么是“框架”?CI 为什么能被称为框架?“开源”商业模式CI 的某些不足(是的,他并不完美)。

1.1 CodeIgniter 能为你做什么?如果你已经是一位 PHPer,开发过 PHP 应用,CodeIgniter 将会帮助你做得更好,更容易达成目标CI 会减少你的代码量你的脚本可读性也会更好,更容易升级。

他会使你的网站结构更紧凑,代码更强健,如果没有很好地研究 CI 的源代码,你可能还无法察觉到他的强健对大多数兄弟来讲,你可能已经花了不少时间,系统地学习了 PHP、HTML 和 CSS,当然还有 MySQL 什么的,不过如果使用 CI,你只需要一些基本的 LAMP(LNMP)知识,你没有必要先成为一个专家才能使用 CI。

你完全可以先借助于 CI 或别的什么框架软件,成为一个有生产力的 PHP 程序员,拿着高薪然后优雅地进一步学习 PHP 的中高级知识,直至成为一位真正的 PHP 骨灰级的人物下述情形,你最好不要使用 CI:

你没有一点 PHP 和 HTML 的基本知识你想用最少的代码,快速简便的写一个基本的内容管理系统(CMS)(可以看看 Expression Engine)你想写一个只有几个常见功能的简单网站1.1.1 节省时间。

CI 学习周期短,见效快让我们试着评估一下相关的要素:CI 如何减少代码量?你真的可以减少很多工作量:敲击键盘的次数减少了,代码错误减少了,你只需要很少的时间调试代码代码量减少还意味着你只需要较少的空间来存放应用程序。

举两个例子(稍后他们会被进一步分析,因此不用担心如何了解他们的工作原理!)想象你正在写一个 MySQL 数据库查询可能的代码如下:$connection=mysql_connect("localhost"。

,"fred","12345");mysql_select_db("websites",$connection);$result=mysql_query("SELECT * FROM sites",$connection

);while($row=mysql_fetch_array($result,MYSQL_NUM)){foreach($rowas$attribute)print"{$attribute[1]} ";}

现在看看 CI 如何处理同一个问题:$this->load->database(websites);$query=$this->db->get(sites);foreach($query->result

()as$row){print$row->url;}比较字符数:前者 336,后者 112第二个例子,现在让我们想象你正在用 HTML 写一个数据输入窗口,你想要一个下拉输入框下拉框中有三个选项代码如下:。

www.this.comwww.that.com

value="3"selected>www.theother.comCI 的写法和前例一样,因为他把相关内容放入一个数组,更容易由 PHP 进行处理:$urlarray

=array(1=>www.this.com,2=>www.that.com,3=>www.theother.com,);$variable.=form_dropdown(url,$urlarray,3

);在 HTML 中,你需要输入 154 个字符;在 CI 中,只需要 128 个字符1.1.2 使你的网站更健壮你不需要写很多代码,是因为 CI 提供了许多常见的功能,这些经过仔细推敲的代码,对安全性和输入进行了有效的校验和过滤。

初学者往往没有足够的能力全面兼顾功能和安全(这也是中高级程序员与新手之间能力差异的一个方面)1.1.2.1 确保你的链接自动更新设想你正在编写一个菜单页面,有许多超链接可重定向到其他页面他们全部以传统的 HTML 格式编写:。

say hello to Fred后来,你决定转移网站到其他 URL这意谓你必须仔细地去查找并修改代码中的每一处 URL,否则他们将无法正常工作。

CI 给你一个简单的函数,可以这样编写超链接:echoanchor(start/hello/fred,Say hello to Fred);CI 推荐你把你的 URL 放入一个配置文件中供你的脚本读取CI 的 anchor 函数会自动从配置文件中提取相关 URL。

因此,当你修改一个 URL 时,你只需要修改配置文件中的对应链接,然后所有超链接将自动更新1.1.2.2 防止对数据库的攻击:对表单输入的数据进行校验和处理数据输入可能引发许多问题因为 HTML 和数据库的限制,数据中总包含特定的符号—举例来说,省略符号和引号—可能导致你的数据库遭到攻击,最终得到你无法预料的结果。

解决方案是在把这些数据存入数据库前对这些数据进行相关处理这样做会浪费一些系统时间,增加一些额外编码CI 的表单辅助函数会自动地完成这些工作因此,当你编写一个输入框时:echoform_input(username

,johndoe);CI 也隐式地执行下列校验函数:functionform_prep($str=){if($str===){return;}$temp=__TEMP_AMPERSANDS__;// Replace entities to temporary markers so that

// htmlspecialchars wont mess them up $str=preg_replace("/&#(\d+);/","$temp\\1;",$str);$str=preg_replace

("/&(\w+);/","$temp\\1;",$str);$str=htmlspecialchars($str);// In case htmlspecialchars misses these.

$str=str_replace(array("","),array("'","""),$str);// Decode the temp markers back to entities

$str=preg_replace("/$temp(\d+);/","&#\\1;",$str);$str=preg_replace("/$temp(\w+);/","&\\1;",$str);return

$str;}上述函数捕获像“&”这样的特殊字符,以便在你的页面提交时不会造成混乱你应该知道,有些字符会引起问题并不是所有的用户都会中规中矩的输入符合要求的信息,你也不可能知道使用浏览器输入信息的是什么人,他们在想什么,做什么。

你可以使用 CI 来防止输入不符合要求的信息当然,你大可不必知道 CI 是如何在幕后为你做到这一切的,你只需要简单地输入如下代码:echoform_input(username,johndoe);1.1.3 增强你的代码

CI 使你写代码更容易了不像有些类库如 PEAR 等,集成比较困难,(有时候你会找不到支持 PEAR 的主机),CI 很容易集成,只要把他放入一个目录,他就能很好地工作CI 所有代码的可读性好,也很健壮,推出前经过社区用户的认真测试,所以在你使用时,这些代码已经经历了很多考验。

让我们看两个例子1.1.3.1 发送 Email 和附件很简单发送 Email 的功能实现起来比较复杂,但是,使用 CI 将使这件事变得很简单:$this->load->library(email);$this

->email->from(your@your-site.com,Your Name);$this->email->subject(Email Test);$this->email->message(Testing the email class.

);$this->email->send();实现发送 Email 的功能中有一些不好解决的技术问题:比如设置文本自动换行(取消设置的话则可以保持长 URL 地址不被换行或截断)或发送附件原生 PHP 实现起来比较复杂,CI 简化了这些工作,他的 Email 类使得发送附件很简单:。

$this->email->attach(/path/to/photo1.jpg);CI 把内部的复杂部分悄悄地完成了,举例来说,实现了列举近百种不同附件的 MIME 类型的功能所以他知道你的相片 photo1.jpg 是一个“image/jpeg”MIME 类型。

因此他在你附件的适当位置填写必要的限制符号,他处理文本的换行,让你轻松标记出不希望出现换行的文本1.1.3.2 压缩用户要下载的文件以加快下载速度为了加快下载速度,常见的做法是在下载之前压缩下载文件你可能不知道如何处理。

但 CI 可以方便地让你用 4 行代码完成此功能:$name=mydata1.txt;$data=the contents of my file..........;$this->zip->add_data

($name,$data);$this->zip->archive(c:/my_backup.zip);运行这些代码,你会在你的 C 盘根目录下找到一个压缩文件,解压后即为原始文件网站的用户并不清楚你是如何简便实现这个功能的,但他们能体会到网站的下载速度很快,而你只用了数分种(而不是数小时)就实现了这个功能。

1.2 CodeIgniter 是什么?框架又是什么?当计算机编程发明不久之后,便有人发现,这其中涉及到了太多的重复操作之后,也许是 Ada Lovelace(人类历史上的首位程序员),又或许是 Alan Turning,决定将计算机程序模块化,从而使得程序代码可以重复使用。

PHP 程序员们早已习惯了将需要重复使用的代码写在函数中,并将这些函数放在 include 文件里同样的,框架是为重用而发明的,存放在独立的文件中,用来简化重复操作的代码上面例子中连接数据库和编写 HTML 表单元素的工作都可以调用相关的 CI 函数来进行简化。

他超越了这一点有很多种方法实现同样的功能;大多数的框架会让你按照他实现的方法来做他们选择了一种方式来解决问题,所以你也必须要遵循这种方式如果方式得当,编程便会轻松许多,反之则会事倍功半好的框架设计能实现需要的功能,而且尽可能地不互相牵连。

一个好框架为你做出各种功能的实现,并且给你提供一步一步的编程指导提到框架时,就不能不提到著名的框架:Ruby on RailsRails 做得相当成功,因为他籍由最少量的编码,提供简便快速的网站开发本质上,他是一个结构和一组工具,专为使用 Ruby 语言的用户开发,允许你快速建立 Ruby 系统原型。

他不是 Ruby 语言中唯一的框架,但他一定是最有开发效率和最有名的另一方面,如果你已经花了很大功夫学习 PHP 的话,那么从 Ruby 重新开始又要重头学起为 PHP 开发的框架有很多,CI 只是其中之一。

其他的还包括 Zend Framework、Cake、Trax 等如果你访问上述网址中相关产品的官方网站,你将会注意到,每个论坛都有一个共同的热点,就是到底哪一个框架是最好的?事实似乎是每个都有他的长处,而且又都有自己的弱点。

我的评估标准是:我很忙;因此框架应该节省我的时间,从中选择一个后,就坚持使用下去,因此就有了这本介绍 CI 的书1.3 关于开发者

Rick Ellis 开发了 CI,他曾经是一个摇滚音乐家,现在是一名程序员Rick 还是 pMachine 公司的 CEO,该公司还有一个著名的内容管理系统叫做 Expression Engine2006 年 1 月,他在博客中写道:。

“我花了数星期时间搜索和安装 PHP 框架,也被他们中的许多打击了一把,令我惊讶的是,我发现大多数框架存在以下问题:文档不全或质量很差他们假定你水平很高,希望你能很容易地掌握使用方法他们是为那些有超级用户权限,或者有权修改服务器设置的人编写的。

他们假定你偏爱命令行操作,事实上许多人无此爱好偏爱使用 PEAR 类库或其他开源类库模板语法过于复杂有的太笨重,有的又太简单我还没有找到一个简单的 PHP 框架,健壮、易于使用、文档完整,包含建立一个完整应用需要的所有工具,并且有一个以浏览器为基础的接口,用普通用户权限就能安装。

没有别的原因,就是“市场需要”这个单一的原因促使我想开发这样一个框架产品……”结果是 CI 诞生了,作为一个业余时间开发的作品,Rick 慷慨地决定使他成为开源作品在跑生意间隙,他保持经常更新 CI他也创建了一个优秀的论坛,CI 使用者能提出问题并且分享开发心得。

所有这些资源可从下列网址获得:CodeIgniter Web Framework他能实现自己的目标吗?相信你使用后会得出自己的结论……现在 CI 项目已经移交给不列颠哥伦比亚理工学院(BCIT),CI 3 目前正在开发并已发布多个版本。

1.4 “开源”商业模式这类软件可能会有一些让人感到困惑的地方如果你喜欢你的软件与昂贵的支持合同或“大公司”联系起来的话,那么 CI 并不适合你(但是,你使用 PHP 能做什么呢?PHP 的用户都知道,技术支持与 PHP 语言的开发,一定程度上依赖于“社区”数百或数千用户的义务劳动。

)社区支持也存在一些问题一致性和高质量可能“没有保证”—任何人都可以发表到论坛上,有时这些发表的内容是完全错误的(注意:如果你去看一下一些昂贵商业软件的授权细则,也是不对产品质量做出保证的)但是对于“开源”产品而言,则必须自行细加推敲,而不能一味的相信论坛上的表象言论。

如果你对研究新事物饶有兴致,那么 CI 非常适合你!CI 的官网是社区和论坛的门户。

1.5 CI 不能做什么CI 有他本身的缺点Rick 把 CI 定义为小型“轻量级”框架CI 不能解决你所有的问题但他能够:使 PHP 编程更容易更快速帮助你架构网站或使你更容易地设计架构作为“轻量级”框架的一个结果是:他没有他的对手所具有的许多特性。

像 Rails 因为他包含“脚手架(scaffolding)”和“代码生成器”,因此可以为你编写一些基本的脚本代码因此,举例来说,一旦你建立了一个数据库,Rails 能自动生成简单的 CRUD 脚本(创建、读取、更新和删除)。

除此之外,Rails 还能让你编写“代码生成器”—自动地编写其他的简单脚本代码Rails 社区中有许多这样的例子,因此你可以做很多智能化的东西CI 不这样做相反地 CI 专注于使基本的东西更容易他处理的一些事物是:。

Session 管理和 Cookie(见第六章)数据库访问和查询(见第四章)创建 HTML 相关内容,如页面和表单,并验证表单项目(见第五章)测试(第八章)Internet 通信,使用 FTP 或 XMLRPC。

(第九章)很熟悉吧?这些全部是基本功能,如果你正在创建一个动态网站,你一定会做这些工作CI 使这些工作更容易,而且使你的代码尽可能更好地工作1.6 许可协议如果你正在构建一个商业应用程序,那么使用的任何软件的许可协议都将是至关重要的。

(如果你要筹集风险投资,那么让 VC 的律师去对其进行详述)CI 没有这方面的问题CI 的许可协议是 MIT 许可协议1.7 总结如果你已经掌握了 PHP 的基本知识,并且想“聪明”地编写动态网站脚本,CodeIgniter 框架会使你的工作更容易,他帮助你:

节省时间使你的网站更健壮帮助你编写更复杂的系统CI 使你更好地享受编程乐趣,而不是一个干体力活的苦逼码农有相当多的框架并不是为 PHP 语言开发的他们都能减少重复编码的工作,使编写复杂程序变得更容易,并且建立一个合理的系统架构。

本书并不想制造框架大战文章中已经解释了选择 CI 的理由,让他为你节省更多的时间用在学习、工作和生活中吧本书介绍了框架的一些主要特性,并对框架内部的运作进行了一些解释我通过对一个真实程序代码的分析,来展示 CI 是一个可以快速简便的用于艰巨环境中的重要工具。

请享用他!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻97140