PHP 开发框架关键技术分析
摘要:本文在分析主流 Web 架构的基础上,讨论了 PHP 开发框架涉及到的几种主要技
术:
MVC 设计模式、模板解析引擎和数据访问层及其在 PHP 中实现的主流方式和优缺点,
给出了基于被动
MVC、模板解析技术和 Table Data Gateway 模式的数据访问层来实现轻量级
的
PHP 开发框架的解决方案。
关键词:
MVC;模板解析引擎;数据访问层;PHP
1 引言
PHP 是在服务器端执行的脚本语言,具有简单易用、执行效率高和跨平台性好等优点,
是目前最受欢迎的
Web 开发语言之一。然而,由于 PHP5 之前的 PHP 版本对面向对象支持
不完善,导致
PHP 的开发框架研究从 PHP5 发布后才逐渐展开、在发展过程中又受到 Structs
和
ROR 框架的严重影响,没有充分考虑 PHP 语言的特点,造成在 PHP 领域,框架的普及
情况远远不如
Java 领域。PHP 框架的研究首先要解决的是采用何种 Web 架构的问题:
2 Web 开发架构
简单的说,
Web 开发实际上是通过将 HTTP 请求发送给服务器端脚本,通过服务器端
脚本对数据库进行数据管理。
Web 架构即是 Web 系统中服务器脚本以及 HTTP 请求的组织
形式。目前流行的
Web 架构有以下三种:2.1 基于文件/参数。传统的 Web 系统中,服务器脚
本根据功能不同分别存储在不同的目录中。服务器脚本的路径与
URL 地址相对应。HTTP 请
求通过
URL 直接指向某个服务器脚本,并在 URL 后附上特定的参数,以提供脚本执行所
需的数据。脚本
article.php 执行完毕后将执行结果响应给用户。这种是一种面向过程的开发
方式,较为简单直接。在小型的
Web 系统中应用较广泛。但由于在 URL 中附加参数,因此
基于文件
/参数的方式不利于搜索引擎收录,同时各文件相对独立的处理 HTTP 请求,因此
也难以实现系统的集中控制。
2.2 基于控制器/动作。随着面向对象的成熟,Web 系统逐渐引
入基于控制器
/动作的开发方式。这种方式通常使用一个路由模块解析 HTTP 请求,并调用
适当的控制器(或控制器中的某一个动作)对请求进行处理。
MVC 设计模式是基于控制器/
动作的一种典型实现。与基于文件的方式一样,基于控制器
/动作的架构也是建立在请求/响
应驱动的基础上。
2.3 基于组件/事件。基于组件/时间的 Web 系统与桌面应用程序相似,通常
将
Web 系统分为多个组件,各组件可以触发特定的事件并由事件处理器处理。这样就可以
将
HTTP 请求抽象后映射到事件上。.NET 是典型的基于组件/事件的 Web 框架。其代码重用
能力很强,开发速度也很高。但这种方式往往要求完善的控件支持和强大的
IDE 开发环境。
在缺乏这两个条件时,其优势难以发挥。
3 PHP 与 MVC 模式
3.1 在 PHP 中实现 MVC 的特点。MVC 模式通过分离数据、逻辑和显示,将 Web 系统中
的数据处理、流程控制和数据展示强制性的分为模型、控制器和视图三大部分。三者通过控制
器结合在一起。从而从根本上避免了传统的
Web 开发方式中存在的显示、逻辑和数据相互缠
绕的问题,使得程序结构清晰而灵活
[2]。MVC 模式要求在跨页面的脚本中实现模型和控制
器互相通信。然而由于
PHP 对象在页面执行完毕后即被回收,因此 PHP 对象无法跨页面存
在,传统的
MVC 架构在 PHP 上无法完全实现。通常解决方案是在回收前将对象存入数据库
或
SESSION 中,需要时在从数据库或 SESSION 中重建对象。这种方式由于需要频繁读写数
据库,显然效率较为低下。基于
PHP 对象无法跨页面存在的现状,在 PHP 框架中使用被动
MVC 模式更为合理。在被动 MVC 中,模型以普通对象的形式存在,与 MVC 结构的其他部
分没有关联。这样既可避免对象跨页面的问题,避免了
MVC 模式带来的效率下降。3.2 视图
层。
Web 项目扩大带来的众多问题中,前端设计团队与程序设计团队的协作、维护和扩展难