用 PHP 开发健壮
![](/icons/25490de.gif)
代码系列文章是有关解决大中型应用
![](/icons/25490chengxu.gif)
中
![](/icons/25490de.gif)
实际问题
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
这
![](/icons/25490yi.gif)
系列文章主要侧重于 PHP 4 中可用
![](/icons/25490de.gif)
新功能
![](/icons/25490dou.gif)
重点介绍了大量使开发工作更容易
![](/icons/25490de.gif)
窍门技巧和窍门
![](/icons/25490dou2.gif)
在这
![](/icons/25490yi.gif)
系列文章中
![](/icons/25490dou.gif)
您将发现许多要学习
![](/icons/25490de.gif)
举例和技术
![](/icons/25490dou.gif)
还附带了大量样本代码
![](/icons/25490dou2.gif)
在这第
![](/icons/25490yi.gif)
篇文章中
![](/icons/25490dou.gif)
PHP 高手 Amol Hatwar 从更高
![](/icons/25490de.gif)
角度介绍了如何为中到大型 Web 应用
![](/icons/25490chengxu.gif)
设计和编写无
![](/icons/25490cuowu.gif)
、可维护
![](/icons/25490de.gif)
代码
![](/icons/25490dou2.gif)
如果您是
![](/icons/25490yi.gif)
名构建 Web 应用
![](/icons/25490chengxu.gif)
![](/icons/25490de.gif)
开发者并且需要速度、功能和平台独立性(platform-independence)
![](/icons/25490dou.gif)
那么 PHP 将适合您
![](/icons/25490dou2.gif)
而且 PHP 是免费
![](/icons/25490de.gif)
![](/icons/25490dou.gif)
易于学习和部署
![](/icons/25490dou2.gif)
这些是使 PHP 如此受欢迎
![](/icons/25490de.gif)
最大优点
![](/icons/25490dou2.gif)
但这些优点也可以变成缺点
![](/icons/25490dou2.gif)
由于 PHP 易于使用
![](/icons/25490dou.gif)
所以开发者在本应规划和设计
![](/icons/25490de.gif)
时候
![](/icons/25490dou.gif)
他们经常先把代码硬塞到编辑器中
![](/icons/25490dou2.gif)
而且
![](/icons/25490dou.gif)
在 PHP 中
![](/icons/25490dou.gif)
解决问题
![](/icons/25490de.gif)
思路方法不止
![](/icons/25490yi.gif)
种
![](/icons/25490dou.gif)
比较容易犯那种惨痛
![](/icons/25490de.gif)
![](/icons/25490cuowu.gif)
![](/icons/25490dou.gif)
这种
![](/icons/25490cuowu.gif)
过后难以订正
![](/icons/25490dou2.gif)
在这
![](/icons/25490yi.gif)
系列文章中
![](/icons/25490dou.gif)
您将学会如何避免许多
![](/icons/25490cuowu.gif)
![](/icons/25490dou2.gif)
如果您
![](/icons/25490yi.gif)
步不落地坚持到底
![](/icons/25490dou.gif)
您会发现自己尝试
![](/icons/25490yi.gif)
两次就能编写无
![](/icons/25490cuowu.gif)
![](/icons/25490de.gif)
代码了
![](/icons/25490dou.gif)
对此不要感到奇怪
![](/icons/25490dou2.gif)
我还会指出 PHP 4 中可用
![](/icons/25490de.gif)
新功能
![](/icons/25490dou.gif)
它们使开发工作更容易
![](/icons/25490dou2.gif)
我要介绍
![](/icons/25490de.gif)
大多数举例都是用来处理诸如脚本配置和安装、文件处理以及数据库使用的类
![](/icons/25490de.gif)
实际问题
![](/icons/25490dou2.gif)
即使您对这
![](/icons/25490yi.gif)
切都不熟悉
![](/icons/25490dou.gif)
您也会发现理解起来很容易
![](/icons/25490dou2.gif)
不过
![](/icons/25490dou.gif)
我假设您对 PHP 有初步
![](/icons/25490de.gif)
了解
![](/icons/25490dou2.gif)
如果您需要重新温习
![](/icons/25490dou.gif)
您会发现本文结尾处所列出
![](/icons/25490de.gif)
参考资料会对您有所帮助
![](/icons/25490dou2.gif)
奠定健壮
![](/icons/25490de.gif)
基础
用 PHP 编写代码和用类似 C
![](/icons/25490de.gif)
语言编写代码非常相似
![](/icons/25490dou2.gif)
由于它们句法上类似
![](/icons/25490dou.gif)
所以还会导致类似
![](/icons/25490de.gif)
代码维护问题
![](/icons/25490dou2.gif)
当必须开发大型应用
![](/icons/25490chengxu.gif)
时
![](/icons/25490dou.gif)
您可能要编写大量代码
![](/icons/25490dou2.gif)
随着时间
![](/icons/25490de.gif)
流逝
![](/icons/25490dou.gif)
这些代码可能变得难以管理
![](/icons/25490dou.gif)
![](/icons/25490cuowu.gif)
很快就会乘虚而入
![](/icons/25490dou2.gif)
无论您从哪里听到这种说法
![](/icons/25490dou.gif)
都不要相信 — 至少不能全信
![](/icons/25490dou2.gif)
但是
![](/icons/25490dou.gif)
更重要
![](/icons/25490de.gif)
事实是如果您发现自己维护代码过于频繁
![](/icons/25490dou.gif)
那么首先您
![](/icons/25490de.gif)
应用
![](/icons/25490chengxu.gif)
![](/icons/25490de.gif)
设计可能是很糟糕
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
正确地设计代码
您最初做出
![](/icons/25490de.gif)
选择会影响您以后编写代码时
![](/icons/25490de.gif)
自由度
![](/icons/25490dou2.gif)
这使得正确
![](/icons/25490de.gif)
设计成为
![](/icons/25490yi.gif)
个重要
![](/icons/25490de.gif)
先决条件
![](/icons/25490dou2.gif)
虽然当您解决
![](/icons/25490yi.gif)
个微不足道
![](/icons/25490de.gif)
问题时设计会成为
![](/icons/25490yi.gif)
个额外
![](/icons/25490de.gif)
仪式
![](/icons/25490dou.gif)
但是您至少必须知道就是应该这样做
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
许多人把设计和规划看作额外
![](/icons/25490de.gif)
开销
![](/icons/25490dou2.gif)
但是以糟糕
![](/icons/25490de.gif)
设计开始
![](/icons/25490dou.gif)
或者根本就没有设计
![](/icons/25490dou.gif)
结果总是会造成草率
![](/icons/25490de.gif)
代码
![](/icons/25490dou2.gif)
请记住
![](/icons/25490dou.gif)
再巧妙
![](/icons/25490de.gif)
编码也不能弥补糟糕
![](/icons/25490de.gif)
设计
![](/icons/25490dou2.gif)
虽然如何设计应用
![](/icons/25490chengxu.gif)
超出了这个系列文章
![](/icons/25490de.gif)
范畴
![](/icons/25490dou.gif)
但我还是会提示
![](/icons/25490yi.gif)
些设计 Web 应用
![](/icons/25490chengxu.gif)
时应该牢记
![](/icons/25490de.gif)
问题
![](/icons/25490dou2.gif)
分割和征服
通过
![](/icons/25490yi.gif)
个个较小
![](/icons/25490de.gif)
松散耦合
![](/icons/25490de.gif)
部件来设计和编写大型应用
![](/icons/25490chengxu.gif)
总是更可取
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
这样
![](/icons/25490dou.gif)
每个部件都是可维护
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
例如
![](/icons/25490dou.gif)
![](/icons/25490yi.gif)
个内容管理系统(Content Management
![](/icons/25490System.gif)
![](/icons/25490dou.gif)
CMS)可能分布在许多诸如用户认证、显示、内容解析和查看统计信息等较小
![](/icons/25490de.gif)
模块上
![](/icons/25490dou2.gif)
而且
![](/icons/25490dou.gif)
如果您
![](/icons/25490de.gif)
模块足够通用
![](/icons/25490de.gif)
话
![](/icons/25490dou.gif)
您可以在您开发
![](/icons/25490de.gif)
其它应用
![](/icons/25490chengxu.gif)
中重用代码
![](/icons/25490dou2.gif)
![](/icons/25490chengxu.gif)
员经常这么做
![](/icons/25490dou.gif)
但他们仍然抱怨
![](/icons/25490dou2.gif)
至于编码
![](/icons/25490de.gif)
窍门技巧就是让每个模块具有它绝对需要
![](/icons/25490de.gif)
功能并且到此为止
![](/icons/25490dou2.gif)
赋予
![](/icons/25490yi.gif)
个模块
![](/icons/25490de.gif)
功能要不多不少
![](/icons/25490dou.gif)
恰到好处
![](/icons/25490dou2.gif)
绝对不要在页面中考虑
如果您对用 PHP 将您
![](/icons/25490de.gif)
HTML 页面变得更动态些感兴趣
![](/icons/25490dou.gif)
这部分将适合您
![](/icons/25490dou2.gif)
当您想在每个页面上显示日期和时间以使其看上去是最新
![](/icons/25490de.gif)
时候
![](/icons/25490dou.gif)
通常是这个习惯开始
![](/icons/25490de.gif)
时候
![](/icons/25490dou2.gif)
每个 HTML 页面都变成
![](/icons/25490yi.gif)
个只有有限几行
![](/icons/25490de.gif)
小 PHP 脚本
![](/icons/25490dou.gif)
日期
![](/icons/25490hanshu.gif)
隐藏在某个地方
![](/icons/25490dou2.gif)
如果这是您想要
![](/icons/25490de.gif)
![](/icons/25490dou.gif)
您必须认可这是使该作业实现
![](/icons/25490de.gif)
最简单
![](/icons/25490de.gif)
方式
![](/icons/25490dou2.gif)
但是
![](/icons/25490dou.gif)
想象
![](/icons/25490yi.gif)
下您必须做些什么变动才能改变页面上呈现
![](/icons/25490de.gif)
日期格式
![](/icons/25490dou2.gif)
您将不得不更改每个页面内
![](/icons/25490de.gif)
代码
![](/icons/25490dou2.gif)
显然
![](/icons/25490dou.gif)
有更好
![](/icons/25490de.gif)
方式来达到这个目
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
我最喜欢
![](/icons/25490de.gif)
方式是使用配置文件并在配置文件中定义
![](/icons/25490yi.gif)
个常量
![](/icons/25490dou.gif)
这个常量保留 date
![](/icons/25490hanshu.gif)
![](/icons/25490de.gif)
格式
![](/icons/25490zifu.gif)
串
![](/icons/25490dou2.gif)
然后
![](/icons/25490dou.gif)
您就可以在需要
![](/icons/25490de.gif)
地方使用 date
![](/icons/25490hanshu.gif)
了
![](/icons/25490dou2.gif)
每个页面仍以脚本结束
![](/icons/25490dou.gif)
但是您要彻底地把那些您必须对单行代码作更改
![](/icons/25490de.gif)
地方降到最少
图 1. 避免硬编码
![](http://www.crazycoder.cn/WebFiles/20091/1b72eb19-5058-46da-9a66-2c162780b277.jpg)
如 图 1所示
![](/icons/25490dou.gif)
您在所有页面上都能看到日期格式
![](/icons/25490de.gif)
更改
![](/icons/25490dou2.gif)
这里
![](/icons/25490de.gif)
想法就是要避免复制代码以及硬编码
![](/icons/25490dou2.gif)
在编写大型应用
![](/icons/25490chengxu.gif)
时
![](/icons/25490dou.gif)
请牢记这
![](/icons/25490yi.gif)
点
![](/icons/25490dou2.gif)
当您避免了复制代码时
![](/icons/25490dou.gif)
调试和维护就变得更加容易了
减少客户机端要求
Web 页面和应用
![](/icons/25490chengxu.gif)
![](/icons/25490de.gif)
类型已经向多方向发展了
![](/icons/25490dou2.gif)
首先是图像和图像映射
![](/icons/25490dou.gif)
然后是实现很酷
![](/icons/25490de.gif)
动画
![](/icons/25490de.gif)
Java applet 和客户机端脚本
![](/icons/25490dou2.gif)
现在是 Flash
![](/icons/25490dou2.gif)
有影响是好事情
![](/icons/25490dou.gif)
但是您必须记住 Web 背后
![](/icons/25490de.gif)
整体思想是使任何需要信息
![](/icons/25490de.gif)
人都能随时访问这些信息
![](/icons/25490dou2.gif)
如果您使用并非所有浏览器和平台都支持
![](/icons/25490de.gif)
技术
![](/icons/25490dou.gif)
就会拒绝人们访问您
![](/icons/25490de.gif)
信息
![](/icons/25490dou2.gif)
您永远不知道不能访问您 Web 站点
![](/icons/25490de.gif)
人是否本来可以成为您
![](/icons/25490de.gif)
下
![](/icons/25490yi.gif)
个客户!
您
![](/icons/25490de.gif)
应用
![](/icons/25490chengxu.gif)
设计应该尽可能地将网络流量降到最低
![](/icons/25490dou2.gif)
我们经常看到许多网站WebSite访问量过多并且只给浏览器
![](/icons/25490yi.gif)
类仅能使其运行
![](/icons/25490de.gif)
cookie
![](/icons/25490dou2.gif)
篡改大量 cookie 不仅消耗带宽
![](/icons/25490dou.gif)
而且还使得许多方面难以管理
![](/icons/25490dou2.gif)
根据经验
![](/icons/25490dou.gif)
如果您
![](/icons/25490de.gif)
应用
![](/icons/25490chengxu.gif)
发送超过 40 KB
![](/icons/25490de.gif)
数据或者如果您
![](/icons/25490de.gif)
页面需要多于 5 秒
![](/icons/25490de.gif)
时间来装入
![](/icons/25490dou.gif)
那就该从头设计应用
![](/icons/25490chengxu.gif)
了
![](/icons/25490dou2.gif)
各处
![](/icons/25490de.gif)
小调整不会持续太久
![](/icons/25490dou2.gif)
如果您到处看看
![](/icons/25490dou.gif)
就会发现最受欢迎
![](/icons/25490de.gif)
、访问人数最多
![](/icons/25490de.gif)
站点都是非常简单
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
您还应该考虑下
![](/icons/25490yi.gif)
波移动设备以及它们访问您
![](/icons/25490de.gif)
应用
![](/icons/25490chengxu.gif)
所用
![](/icons/25490de.gif)
连接
![](/icons/25490dou2.gif)
最好
![](/icons/25490de.gif)
做法就是
![](/icons/25490dou.gif)
您
![](/icons/25490de.gif)
应用
![](/icons/25490chengxu.gif)
必须根据请求内容
![](/icons/25490de.gif)
客户机对内容进行调整
![](/icons/25490dou2.gif)
Leon Atkinson 在他
![](/icons/25490de.gif)
Core PHPProgramming
![](/icons/25490yi.gif)
书
![](/icons/25490de.gif)
第 720 页中说到
![](/icons/25490dou.gif)
“我们可以设法将 HTML 文档
![](/icons/25490de.gif)
大小控制得较小
![](/icons/25490dou.gif)
并且我们可以设法避免诸如嵌套表(nested table)这样
![](/icons/25490de.gif)
复杂
![](/icons/25490de.gif)
HTML
![](/icons/25490dou.gif)
但是我们不能对每个人
![](/icons/25490de.gif)
28.8 调制解调器都进行升级
![](/icons/25490dou2.gif)
”
把代码、内容和显示分开
HTML 是显示内容
![](/icons/25490de.gif)
标记语言
![](/icons/25490dou.gif)
PHP 是嵌入 HTML
![](/icons/25490de.gif)
脚本语言
![](/icons/25490dou2.gif)
这确实使简单
![](/icons/25490de.gif)
任务变得容易 — 例如
![](/icons/25490dou.gif)
以日期为例
![](/icons/25490dou2.gif)
不过
![](/icons/25490dou.gif)
当您要实现复杂
![](/icons/25490de.gif)
要求时
![](/icons/25490dou.gif)
将 PHP 嵌入 HTML 使代码
![](/icons/25490de.gif)
简单性尽失
![](/icons/25490dou2.gif)
尽可能地把代码、内容和显示分开
![](/icons/25490dou.gif)
这很好
![](/icons/25490dou2.gif)
考虑
![](/icons/25490yi.gif)
下您正在阅读
![](/icons/25490de.gif)
这个文档
![](/icons/25490dou2.gif)
这个文档开始被创建为
![](/icons/25490yi.gif)
个 XML 文件
![](/icons/25490dou2.gif)
HTML 和 PDF 版本是用样式表自动生成
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
代码(向您显示该页面
![](/icons/25490de.gif)
应用
![](/icons/25490chengxu.gif)
)、内容(XML 文档)和显示(样式表(style sheet))是区别
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
正象将核心功能封装在模块中以及避免代码复制很重要
![](/icons/25490yi.gif)
样
![](/icons/25490dou.gif)
用单独
![](/icons/25490de.gif)
内容源代码以及按照要求
![](/icons/25490de.gif)
方式显示内容也很重要
![](/icons/25490dou2.gif)
您根据客户机和连接速度定制页面
![](/icons/25490de.gif)
灵活性也增加了
![](/icons/25490dou2.gif)
同时使
![](/icons/25490chengxu.gif)
员、设计师和作者彼此独立工作 — 如果您正在处理
![](/icons/25490yi.gif)
个大型项目
![](/icons/25490dou.gif)
这是
![](/icons/25490yi.gif)
件好事
![](/icons/25490dou2.gif)
不要害怕抛弃设计
无论别人告诉您什么
![](/icons/25490dou.gif)
实战才是学习应用
![](/icons/25490chengxu.gif)
设计
![](/icons/25490de.gif)
最佳方式
![](/icons/25490dou2.gif)
如果您刚刚起步
![](/icons/25490dou.gif)
可能会犯许多
![](/icons/25490cuowu.gif)
— 这就是学习思路方法
![](/icons/25490dou2.gif)
糟糕
![](/icons/25490de.gif)
设计应该被抛弃
![](/icons/25490dou2.gif)
这就是您必须保持代码、内容和显示松散耦合
![](/icons/25490de.gif)
原因 — 抛弃糟糕
![](/icons/25490de.gif)
设计成为减轻痛苦
![](/icons/25490de.gif)
手段
![](/icons/25490dou2.gif)
当您丢弃陈旧
![](/icons/25490de.gif)
代码
![](/icons/25490dou.gif)
以更好
![](/icons/25490de.gif)
代码取而代的
![](/icons/25490de.gif)
时候
![](/icons/25490dou.gif)
您可以保留内容和显示
![](/icons/25490dou2.gif)
现在
![](/icons/25490dou.gif)
回到我所承诺
![](/icons/25490de.gif)
问题上
![](/icons/25490dou.gif)
使您
![](/icons/25490de.gif)
代码健壮起来
![](/icons/25490dou2.gif)
您必须
![](/icons/25490yi.gif)
直记住您
![](/icons/25490de.gif)
代码将为其他人
![](/icons/25490de.gif)
内容和显示提供力量
![](/icons/25490dou2.gif)
如果您
![](/icons/25490de.gif)
代码不能胜任
![](/icons/25490de.gif)
话
![](/icons/25490dou.gif)
其他部门再多惊人
![](/icons/25490de.gif)
努力也不能弥补这个缺陷
![](/icons/25490dou2.gif)
编写健壮
![](/icons/25490de.gif)
代码
假定您
![](/icons/25490de.gif)
代码要求不变
![](/icons/25490dou.gif)
您将不会明显地发现更改代码
![](/icons/25490de.gif)
需要
![](/icons/25490dou2.gif)
除了偶尔需要最优化和改进的外
![](/icons/25490dou.gif)
您
![](/icons/25490de.gif)
代码应该像加了润滑油
![](/icons/25490de.gif)
机器
![](/icons/25490yi.gif)
样运行
![](/icons/25490dou2.gif)
听上去很困难?事实并非如此
![](/icons/25490dou2.gif)
坦白地说
![](/icons/25490dou.gif)
编写健壮
![](/icons/25490de.gif)
代码并不需要天才
![](/icons/25490dou2.gif)
您只需要在拿不准
![](/icons/25490de.gif)
时候问自己
![](/icons/25490yi.gif)
些适当
![](/icons/25490de.gif)
问题
![](/icons/25490dou.gif)
这样就不会偏离正轨:
它安全吗?
它简单且易于理解吗?
它是平台独立
![](/icons/25490de.gif)
吗?
它足够快吗?
保护您
![](/icons/25490de.gif)
代码
任何使大量用户满意
![](/icons/25490de.gif)
系统都必须是安全
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
尽管 PHP 本身不易受到黑帽(black-hat)黑客
![](/icons/25490de.gif)
攻击
![](/icons/25490dou.gif)
但是您不要太肯定
![](/icons/25490dou2.gif)
在版本 4.2.2 的前
![](/icons/25490de.gif)
PHP 4 有严重
![](/icons/25490de.gif)
安全性缺陷
![](/icons/25490dou2.gif)
要
![](/icons/25490yi.gif)
直确保在有适当加密
![](/icons/25490de.gif)
网络上存储或传送敏感数据
![](/icons/25490dou2.gif)
这对于处理业务、存储信息(如信用卡号码)以及传输机密数据
![](/icons/25490de.gif)
应用
![](/icons/25490chengxu.gif)
来说更重要
![](/icons/25490dou2.gif)
现在
![](/icons/25490dou.gif)
很难信任用户提交
![](/icons/25490de.gif)
数据
![](/icons/25490dou2.gif)
要确保对数据进行了验证并确保数据在使用前是清白
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
请牢记
![](/icons/25490dou.gif)
将您
![](/icons/25490de.gif)
Web 应用
![](/icons/25490chengxu.gif)
放到因特网上就是向巨大
![](/icons/25490de.gif)
网络公布了您
![](/icons/25490de.gif)
系统、软件Software、数据以及业务
![](/icons/25490dou2.gif)
确保您
![](/icons/25490de.gif)
代码
![](/icons/25490yi.gif)
直安全地运行
![](/icons/25490dou2.gif)
保持代码简单
您
![](/icons/25490de.gif)
代码应该是易于理解、可读性好且文档良好
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
为了减少您熟悉自己或其他人
![](/icons/25490de.gif)
代码所需
![](/icons/25490de.gif)
时间
![](/icons/25490dou.gif)
请在工程内
![](/icons/25490yi.gif)
直使用公共命名和编码约定
![](/icons/25490dou2.gif)
请投入时间以确保在需要维护代码时这些方面会有所回报
![](/icons/25490dou2.gif)
您最好在编程时为代码建立文档
![](/icons/25490dou2.gif)
能为您解析所有
![](/icons/25490de.gif)
脚本并创建看起来整洁
![](/icons/25490de.gif)
HTML 格式
![](/icons/25490de.gif)
文档
![](/icons/25490de.gif)
工具并不存在
![](/icons/25490dou2.gif)
如果您改变了代码
![](/icons/25490de.gif)
行为
![](/icons/25490dou.gif)
就要相应地改变文档
![](/icons/25490dou2.gif)
如果代码
![](/icons/25490de.gif)
文档并没有实际记录什么东西
![](/icons/25490dou.gif)
那么拥有这样
![](/icons/25490de.gif)
文档是没用
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
确保您
![](/icons/25490de.gif)
代码是备有文档
![](/icons/25490de.gif)
、简单
![](/icons/25490de.gif)
并且易于理解
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
从长远来看这样会有所帮助
![](/icons/25490dou2.gif)
使代码是平台独立
![](/icons/25490de.gif)
您必须解决
![](/icons/25490de.gif)
另
![](/icons/25490yi.gif)
个问题是平台独立性
![](/icons/25490dou2.gif)
当然
![](/icons/25490dou.gif)
为 Windows 上
![](/icons/25490de.gif)
PHP 编写
![](/icons/25490de.gif)
脚本将对任何其它平台上
![](/icons/25490de.gif)
PHP 起作用:PHP 就是这样设计
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
不过
![](/icons/25490dou.gif)
您仍然需要小心比较小
![](/icons/25490de.gif)
不
![](/icons/25490yi.gif)
致
![](/icons/25490dou2.gif)
例如
![](/icons/25490dou.gif)
换行
![](/icons/25490zifu.gif)
在 Windows 和 UNIX 中就以区别
![](/icons/25490de.gif)
方式表示
![](/icons/25490dou2.gif)
您在访问资源(如位于 PHP 外部
![](/icons/25490de.gif)
数据库)时还必须使用抽取
![](/icons/25490dou2.gif)
比方说您
![](/icons/25490de.gif)
应用
![](/icons/25490chengxu.gif)
用 MySQL 作为数据库服务器来削减成本
![](/icons/25490dou2.gif)
如果您决定以后拥有
![](/icons/25490yi.gif)
个功能更丰富
![](/icons/25490de.gif)
数据库
![](/icons/25490dou.gif)
您必须更改应用
![](/icons/25490chengxu.gif)
中
![](/icons/25490de.gif)
代码
![](/icons/25490dou2.gif)
对代码进行重大更改总是
![](/icons/25490yi.gif)
个苦差事而且是
![](/icons/25490yi.gif)
个易出错
![](/icons/25490de.gif)
过程
![](/icons/25490dou2.gif)
请使用抽取来隔离对易于更改
![](/icons/25490de.gif)
部分
![](/icons/25490de.gif)
改变
![](/icons/25490dou2.gif)
您不必重新编写整个应用
![](/icons/25490chengxu.gif)
![](/icons/25490dou2.gif)
确保您编写
![](/icons/25490de.gif)
是平台独立
![](/icons/25490de.gif)
代码
![](/icons/25490dou2.gif)
这使您
![](/icons/25490de.gif)
应用
![](/icons/25490chengxu.gif)
具有更好
![](/icons/25490de.gif)
适应性和可伸缩性
![](/icons/25490dou2.gif)
为速度构建
最后
![](/icons/25490yi.gif)
个值得处理
![](/icons/25490de.gif)
原因是速度
![](/icons/25490dou2.gif)
当您
![](/icons/25490de.gif)
脚本从数据库中拖拖拉拉地选择大约 300 个条目并显示
![](/icons/25490yi.gif)
个页面时
![](/icons/25490dou.gif)
没有人愿意
![](/icons/25490yi.gif)
直等下去
![](/icons/25490dou2.gif)
将 20 个结果放在 15 个区别
![](/icons/25490de.gif)
页面(这些页面在用户
![](/icons/25490de.gif)
浏览器上快速移动和装入)上通常是
![](/icons/25490yi.gif)
个较好
![](/icons/25490de.gif)
主意
![](/icons/25490dou2.gif)
用户把更快
![](/icons/25490de.gif)
响应时间理解为速度
![](/icons/25490dou2.gif)
另
![](/icons/25490yi.gif)
个易犯
![](/icons/25490de.gif)
![](/icons/25490cuowu.gif)
是每次用户访问页面时都动态创建页面
![](/icons/25490dou2.gif)
这
![](/icons/25490de.gif)
确能确保您
![](/icons/25490de.gif)
站点总是最新
![](/icons/25490dou.gif)
但是当用户数量增加时
![](/icons/25490dou.gif)
PHP 就不能容许这样做了
![](/icons/25490dou2.gif)
您应该高速缓存Cache那些使用频繁
![](/icons/25490de.gif)
页面
![](/icons/25490dou2.gif)
高速缓存Cache使您
![](/icons/25490de.gif)
应用
![](/icons/25490chengxu.gif)
速度更快并且减少了服务器上
![](/icons/25490de.gif)
负载
![](/icons/25490dou2.gif)
确保您
![](/icons/25490de.gif)
代码快速运行
![](/icons/25490dou2.gif)
没人喜欢等待
![](/icons/25490dou2.gif)
整理总结
在这个系列
![](/icons/25490de.gif)
开篇文章中
![](/icons/25490dou.gif)
您了解了编写健壮
![](/icons/25490de.gif)
代码要实际做些什么事
![](/icons/25490dou2.gif)
如果您认真学习
![](/icons/25490de.gif)
话
![](/icons/25490dou.gif)
用 PHP 开发大型应用
![](/icons/25490chengxu.gif)
![](/icons/25490yi.gif)
点儿都不难
![](/icons/25490dou2.gif)
事实上
![](/icons/25490dou.gif)
许多用 PHP 编写
![](/icons/25490de.gif)
应用
![](/icons/25490chengxu.gif)
已经轻松开发出来了
![](/icons/25490dou2.gif)
同时
![](/icons/25490dou.gif)
意识到您容易掉入陷阱中是很重要
![](/icons/25490de.gif)
![](/icons/25490dou2.gif)
只要您进行了规划、把事情分解成许多小
![](/icons/25490yi.gif)
些
![](/icons/25490de.gif)
任务并且正确实现它们 — 几乎没有别
![](/icons/25490de.gif)
什么会阻碍您了
![](/icons/25490dou2.gif)
在下
![](/icons/25490yi.gif)
篇文章中
![](/icons/25490dou.gif)
您将学会如何高效率地使用变量和
![](/icons/25490hanshu.gif)
![](/icons/25490dou2.gif)
我将额外向您展示如何用 PHP 中
![](/icons/25490de.gif)
变量和
![](/icons/25490hanshu.gif)
变
![](/icons/25490yi.gif)
些 戏法
![](/icons/25490dou2.gif)
我们在这篇文章中规划了我们要讨论
![](/icons/25490de.gif)
主要内容
![](/icons/25490dou2.gif)
在下
![](/icons/25490yi.gif)
篇文章的后
![](/icons/25490dou.gif)
我们将逐个讨论这些内容 — 可能甚至会跳跃着讲述
![](/icons/25490dou2.gif)
到时再见
延伸阅读
- 2010-12-15-- php分页,超强PHP分页类 支持四种分页模式
- 2010-12-15-- php分页,超强PHP分页类 支持四种分页模式
- 2010-12-15-- php分页,超强PHP分页类 支持四种分页模式
- 2010-12-15-- php分页,超强PHP分页类 支持四种分页模式
- 2010-12-15-- php分页,超强PHP分页类 支持四种分页模式
- 2010-12-15-- php分页,超强PHP分页类 支持四种分页模式
- 2010-12-15-- php分页,超强PHP分页类 支持四种分页模式
- 2010-12-15-- php分页,超强PHP分页类 支持四种分页模式
- 2010-12-15-- php分页,超强PHP分页类 支持四种分页模式
- 2010-12-15-- php分页,超强PHP分页类 支持四种分页模式
最新评论