帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > PHP编程
用 PHP 开发健壮的代码(一):高屋建瓴的介绍
作者:Amol Hatwar 发布时间:2005-03-11 来源:IBM中国
用 PHP 开发健壮的代码 系列文章是关于解决大中型应用程序中的实际问题的。这一系列文章主要侧重于 PHP 4 中可用的新功能,重点介绍了大量使开发工作更容易的技巧和窍门。在这一系列文章中,您将发现许多要学习的示例和技术,还附带了大量样本代码。在这第一篇文章中,PHP 高手 Amol Hatwar 从更高的角度介绍了如何为中到大型 Web 应用程序设计和编写无错误、可维护的代码。

如果您是一名构建 Web 应用程序的开发者并且需要速度、功能和平台独立性(platform-independence),那么 PHP 将适合您。而且 PHP 是免费的,易于学习和部署。这些是使 PHP 如此受欢迎的最大优点。但这些优点也可以变成缺点。由于 PHP 易于使用,所以开发者在本应规划和设计的时候,他们经常先把代码硬塞到编辑器中。而且,在 PHP 中,解决问题的方法不止一种,比较容易犯那种惨痛的错误,这种错误过后难以订正。

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

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

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

您的应用程序设计应该尽可能地将网络流量降到最低。我们经常看到许多网站访问量过多并且只给浏览器一类仅能使其运行的 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 应用程序放到因特网上就是向巨大的网络公布了您的系统、软件、数据以及业务。

确保您的代码一直安全地运行。

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

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

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

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

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

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

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

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

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

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

参考资料

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·用 PHP 开发健壮的代码(二):有效  (2005-03-11)
 ·用 PHP 开发健壮的代码(三):编写  (2005-03-11)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·Windows下集成安装Apache,PHP,MYSQ
·Mysql注入:SQL Injection with MyS
·PHP 的来龙去脉
·PHP 的功能概述
·PHP与其它CGI的比较
·PHP 的编译配置详细选项
·php.ini 配置详细选项
·如何写作PHP程序
·Hello,World
·嵌入方法
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统