background image

如何使用 PHP 开发高效的 WEB 系统

 PHP 是一个很优秀的工具,它可以简单,也可以复杂。不一样的项目,应该用不一样的
PHP

 

  

 

小项目 简单而直接的 PHP

  一般对于一个功能页面在 20 以下的网站,我们可以用一个很简单的框架结构来写。
在这个规模上,我建议是使用比较直接的面向过程编码方法,原因很简单,没有必要把
class 文件弄的 N 多,结果 controller 里边就一个 new 就完了。当然,需求频繁变化的项目
除外。
  在这个级别上,php 优点表现的很明显:快速开发,一目了然。缺点同时也被隐藏得
很好。
  

 

中型项目 结构优美的 OO 化的 PHP

  对于一个中型项目,我建议使用一个良好设计的框架来做,这个框架可以是基于
MVC 模型,封装了众多底层操作的,当然,一定要有一个好的最好是透明的 cache 机制,
这样,我们为了适应变化而加入的 OO 机制可以运行得更快更好。
  在这个级别上。php 的缺点开始凸现,像对 OO 支持的不完整(这个 PHP5 有很大改进),
只能单线程模式。另外一些外围工具开始出现缺乏支持,像 PHP 没有好的重构工具,没
有好的集成到 IDE 中的单元测试工具。优点当然还是原来的快速开发,广泛的可用的开源
资源。
  

 

大型项目 扩展、优化后的 PHP

  这里的大型项目,简单的指分布式项目,就是说,你的程序需要被部署在 N 台服务
器上了。在这个层级上,PHP 比起 j2ee 的确缺乏很多支持。我曾和 shadow 在 735 上详细讨
论过 PHP 要在大型系统上应用需要解决的一些问题,当然这些问题不光是 PHP 这个语言
的问题,也包括了周边开发的问题:
  1 PHP 的页面代码共享,PHP

 

的源代码被载入内存一次以后,就在其中保留 - 这个用

APC 和 Zend 的优化器可以搞定。
  2 PHP 页面之间的数据对象共享,a.php 和 b.php 之间可以共享一个数据对象,比如
数组,这个现在可以用序列化来作,但是会有文件 io,这块可以用共享内存或者
memcached 来处理。
  3 PHP 的数据库连接池,因为在多前端的情况下,PHP 控制不住对数据库的连接,
所以需要在数据库前边去作一个连接池,类似于 sqlrelay 的东西。另外数据缓存也是很重
要的,大压力开发有一个 tip,就是能不动数据库就不要动数据库。
  4 PHP 的前端 cache 系统。一个透明的可控制的 cache 机制,确保网站的页面以最少次
数查询数据库。这个有很多实现,但是没有找到特别好的。
  5 一个 PHP 应用,成功的解决调这几个问题以后,应付稍微大一点的压力是没有什
么问题的。
  在这个级别上,重要的是,把 PHP java C++ python 之类融合起来,使其成为一个高
效系统。我们可以用 memcached 来做分布式内存管理,可以用 Lucene 来作全文检索,用
ejb 容器来放一些业务逻辑组件,PHP 则作为前端和系统的胶水,快速而灵活的把这些粘
合起来。