代码健壮性:用 PHP 开发健壮的代码 第 1 部分

  用 PHP 开发健壮代码系列文章是有关解决大中型应用实际问题系列文章主要侧重于 PHP 4 中可用新功能重点介绍了大量使开发工作更容易窍门技巧和窍门在这系列文章中您将发现许多要学习举例和技术还附带了大量样本代码在这第篇文章中PHP 高手 Amol Hatwar 从更高角度介绍了如何为中到大型 Web 应用设计和编写无、可维护代码  如果您是名构建 Web 应用开发者并且需要速度、功能和平台独立性(platform-independence)那么 PHP 将适合您而且 PHP 是免费易于学习和部署这些是使 PHP 如此受欢迎最大优点但这些优点也可以变成缺点由于 PHP 易于使用所以开发者在本应规划和设计时候他们经常先把代码硬塞到编辑器中而且在 PHP 中解决问题思路方法不止比较容易犯那种惨痛这种过后难以订正

  在这系列文章中您将学会如何避免许多如果您步不落地坚持到底您会发现自己尝试两次就能编写无代码了对此不要感到奇怪我还会指出 PHP 4 中可用新功能它们使开发工作更容易我要介绍大多数举例都是用来处理诸如脚本配置和安装、文件处理以及数据库使用的类实际问题即使您对这切都不熟悉您也会发现理解起来很容易不过我假设您对 PHP 有初步了解如果您需要重新温习您会发现本文结尾处所列出参考资料会对您有所帮助

  奠定健壮基础

  用 PHP 编写代码和用类似 C 语言编写代码非常相似由于它们句法上类似所以还会导致类似代码维护问题当必须开发大型应用您可能要编写大量代码随着时间流逝这些代码可能变得难以管理很快就会乘虚而入无论您从哪里听到这种说法都不要相信 — 至少不能全信但是更重要事实是如果您发现自己维护代码过于频繁那么首先您应用设计可能是很糟糕

  正确地设计代码

  您最初做出选择会影响您以后编写代码时自由度这使得正确设计成为个重要先决条件虽然当您解决个微不足道问题时设计会成为个额外仪式但是您至少必须知道就是应该这样做许多人把设计和规划看作额外开销但是以糟糕设计开始或者根本就没有设计结果总是会造成草率代码请记住再巧妙编码也不能弥补糟糕设计虽然如何设计应用超出了这个系列文章范畴但我还是会提示些设计 Web 应用时应该牢记问题

  分割和征服

  通过个个较小松散耦合部件来设计和编写大型应用总是更可取这样每个部件都是可维护例如个内容管理系统(Content Management CMS)可能分布在许多诸如用户认证、显示、内容解析和查看统计信息等较小模块上而且如果您模块足够通用您可以在您开发其它应用中重用代码员经常这么做但他们仍然抱怨至于编码窍门技巧就是让每个模块具有它绝对需要功能并且到此为止赋予个模块功能要不多不少恰到好处

  绝对不要在页面中考虑

  如果您对用 PHP 将您 HTML 页面变得更动态些感兴趣这部分将适合您当您想在每个页面上显示日期和时间以使其看上去是最新时候通常是这个习惯开始时候每个 HTML 页面都变成个只有有限几行小 PHP 脚本日期隐藏在某个地方如果这是您想要您必须认可这是使该作业实现最简单方式但是想象下您必须做些什么变动才能改变页面上呈现日期格式您将不得不更改每个页面内代码

  显然有更好方式来达到这个目我最喜欢方式是使用配置文件并在配置文件中定义个常量这个常量保留 date 格式然后您就可以在需要地方使用 date 每个页面仍以脚本结束但是您要彻底地把那些您必须对单行代码作更改地方降到最少

  图 1. 避免硬编码



  如 图 1所示您在所有页面上都能看到日期格式更改这里想法就是要避免复制代码以及硬编码在编写大型应用请牢记这当您避免了复制代码时调试和维护就变得更加容易了

  减少客户机端要求

  Web 页面和应用类型已经向多方向发展了首先是图像和图像映射然后是实现很酷动画 Java applet 和客户机端脚本现在是 Flash有影响是好事情但是您必须记住 Web 背后整体思想是使任何需要信息人都能随时访问这些信息如果您使用并非所有浏览器和平台都支持技术就会拒绝人们访问您信息您永远不知道不能访问您 Web 站点人是否本来可以成为您个客户!

  您应用设计应该尽可能地将网络流量降到最低我们经常看到许多网站WebSite访问量过多并且只给浏览器类仅能使其运行 cookie篡改大量 cookie 不仅消耗带宽而且还使得许多方面难以管理根据经验如果您应用发送超过 40 KB 数据或者如果您页面需要多于 5 秒时间来装入那就该从头设计应用各处小调整不会持续太久如果您到处看看就会发现最受欢迎、访问人数最多站点都是非常简单

  您还应该考虑下波移动设备以及它们访问您应用所用连接最好做法就是应用必须根据请求内容客户机对内容进行调整Leon Atkinson 在他 Core PHPProgramming第 720 页中说到“我们可以设法将 HTML 文档大小控制得较小并且我们可以设法避免诸如嵌套表(nested table)这样复杂 HTML但是我们不能对每个人 28.8 调制解调器都进行升级

  把代码、内容和显示分开

  HTML 是显示内容标记语言PHP 是嵌入 HTML 脚本语言这确实使简单任务变得容易 — 例如以日期为例不过当您要实现复杂要求时将 PHP 嵌入 HTML 使代码简单性尽失尽可能地把代码、内容和显示分开这很好考虑下您正在阅读这个文档这个文档开始被创建为个 XML 文件HTML 和 PDF 版本是用样式表自动生成代码(向您显示该页面应用)、内容(XML 文档)和显示(样式表(style sheet))是区别

  正象将核心功能封装在模块中以及避免代码复制很重要用单独内容源代码以及按照要求方式显示内容也很重要您根据客户机和连接速度定制页面灵活性也增加了同时使员、设计师和作者彼此独立工作 — 如果您正在处理个大型项目这是件好事

  不要害怕抛弃设计

  无论别人告诉您什么实战才是学习应用设计最佳方式如果您刚刚起步可能会犯许多 — 这就是学习思路方法糟糕设计应该被抛弃这就是您必须保持代码、内容和显示松散耦合原因 — 抛弃糟糕设计成为减轻痛苦手段当您丢弃陈旧代码以更好代码取而代的时候您可以保留内容和显示

  现在回到我所承诺问题上使您代码健壮起来您必须直记住您代码将为其他人内容和显示提供力量如果您代码不能胜任其他部门再多惊人努力也不能弥补这个缺陷

  编写健壮代码

  假定您代码要求不变您将不会明显地发现更改代码需要除了偶尔需要最优化和改进的外代码应该像加了润滑油机器样运行

  听上去很困难?事实并非如此坦白地说编写健壮代码并不需要天才您只需要在拿不准时候问自己些适当问题这样就不会偏离正轨:

  它安全吗?

  它简单且易于理解吗?

  它是平台独立吗?

  它足够快吗?

  保护您代码

  任何使大量用户满意系统都必须是安全尽管 PHP 本身不易受到黑帽(black-hat)黑客攻击但是您不要太肯定在版本 4.2.2 的前 PHP 4 有严重安全性缺陷直确保在有适当加密网络上存储或传送敏感数据这对于处理业务、存储信息(如信用卡号码)以及传输机密数据应用来说更重要

  现在很难信任用户提交数据要确保对数据进行了验证并确保数据在使用前是清白请牢记将您 Web 应用放到因特网上就是向巨大网络公布了您系统、软件Software、数据以及业务

  确保您代码直安全地运行

  保持代码简单

  您代码应该是易于理解、可读性好且文档良好为了减少您熟悉自己或其他人代码所需时间请在工程内直使用公共命名和编码约定请投入时间以确保在需要维护代码时这些方面会有所回报

  您最好在编程时为代码建立文档能为您解析所有脚本并创建看起来整洁 HTML 格式文档工具并不存在如果您改变了代码行为就要相应地改变文档如果代码文档并没有实际记录什么东西那么拥有这样文档是没用

  确保您代码是备有文档、简单并且易于理解从长远来看这样会有所帮助

  使代码是平台独立

  您必须解决个问题是平台独立性当然为 Windows 上 PHP 编写脚本将对任何其它平台上 PHP 起作用:PHP 就是这样设计不过您仍然需要小心比较小例如换行在 Windows 和 UNIX 中就以区别方式表示

  您在访问资源(如位于 PHP 外部数据库)时还必须使用抽取比方说您应用用 MySQL 作为数据库服务器来削减成本如果您决定以后拥有个功能更丰富数据库您必须更改应用代码对代码进行重大更改总是个苦差事而且是个易出错过程请使用抽取来隔离对易于更改部分改变您不必重新编写整个应用



  确保您编写是平台独立代码这使您应用具有更好适应性和可伸缩性

  为速度构建

  最后个值得处理原因是速度当您脚本从数据库中拖拖拉拉地选择大约 300 个条目并显示个页面时没有人愿意直等下去将 20 个结果放在 15 个区别页面(这些页面在用户浏览器上快速移动和装入)上通常是个较好主意用户把更快响应时间理解为速度个易犯是每次用户访问页面时都动态创建页面确能确保您站点总是最新但是当用户数量增加时PHP 就不能容许这样做了您应该高速缓存Cache那些使用频繁页面高速缓存Cache使您应用速度更快并且减少了服务器上负载

  确保您代码快速运行没人喜欢等待

  整理总结

  在这个系列开篇文章中您了解了编写健壮代码要实际做些什么事如果您认真学习用 PHP 开发大型应用点儿都不难事实上许多用 PHP 编写应用已经轻松开发出来了同时意识到您容易掉入陷阱中是很重要只要您进行了规划、把事情分解成许多小任务并且正确实现它们 — 几乎没有别什么会阻碍您了

  在下篇文章中您将学会如何高效率地使用变量和我将额外向您展示如何用 PHP 中变量和些 戏法我们在这篇文章中规划了我们要讨论主要内容在下篇文章的后我们将逐个讨论这些内容 — 可能甚至会跳跃着讲述到时再见



Tags:  php分页代码 php源代码 php代码 代码健壮性

延伸阅读

最新评论

发表评论