![PHP框架](http://img.gansulong.com/220814/0P5144217-0.jpg)
文章插图
PHP框架DooPHP一般指本词条
【PHP框架】PHP框架就是一种可以在项目开发过程中 , 提高开发效率 , 创建更为稳定的程式 , 并减少开发者重複编写代码的基础架构 。PHP框架是将不同Web系统开发过程中的共性、通用部分功能进行抽象 , 形成开发Web程式的基本架构 。进行Web系统开发时 , 开发人员如果在PHP框架基础上进行二次开发 , 即可大大简化开发过程 , 快速实现系统功能 。PHP框架能促进Web系统的快速开发、节约时间、减少重複代码量 , 并能帮助初学者创建规範、稳定的Web系统 。
基本介绍中文名:PHP框架
外文名:PHP Frame
功能:解决代码重用以及快速开发的问题
关键技术:MVC模式等
主流PHP框架:Zend Framework、ThinkPHP等
所属领域:计算机科学技术
简介框架 , 即Framework , 其实就是某种套用的半成品 , 或者说是一系列组件 , 供人们选用它来完成我们自己的套用 。换句话说 , 使用框架开发程式 , 就好比使用别人已经搭好的舞台来表演 , 无须费心搭建舞台这样烦琐又底层的事情 , 这样就可以在如何更好地表演上尽心尽力 。例如 , 微软的.NET Framework , 使用它来开发Windows应用程式效率就会高很多 。PHP开发框架也是如此 。PHP开发框架封装了底层的操作 , 把Web程式开发摆到了流水线上 。换句话说 , PHP开发框架有助于促进快速软体开发(RAD) 。使用PHP框架既节约了开发者的时间 , 也有助于开发者创建更为稳定的程式 , 并减少开发者重複编写代码的劳动 。PHP开发框架使得开发者可以花更多的时间去创造真正的Web程式 , 而不是编写重複性的代码 。PHP开发框架多採用“模型一视图一控制器”(MVC)架构模式 。MVC架构最早存在于桌面应用程式中 , M是指数据模型 , V是指用户界面 , C则是指控制器 。使用MVC的目的是将M和V的实现代码分离 , 即隔离了业务逻辑与用户界面 , 不管哪一方改变都不会影响另一方 。在MVC架构中 , 模型(Model)负责数据 , 视图(View)负责表现 , 控制器(Controller)负责业务逻辑 。从本质上说 , MVC拆分了一个程式的开发过程 , 这样你就可以修改独立的每一部分 , 而其他部分不受影响 , 这使得编写PHP代码更为快捷简单 。架构分析在研究PHP开发框架时 , 首先需要分析框架的Web开发架构的使用问题 , 而所谓的Web架构 , 其实就是Web系统伺服器脚本和HTTP请求的组织形式 。主要有三种Web架构可供PHP开发框架使用 。1、基于档案/参数的Web架构在小型Web系统中得到了广泛套用 , 可以根据功能将不同的伺服器脚本存储在不同的目录中 , 并使脚本的路径与URL地址保持一致 , 而这种开发方式虽然简单 , 但是却不利于搜寻引擎收录 , 并且难以实现对系统的集中控制 。2、Web系统还有一种基于控制器/动作的开发方式 , 可以通过调用控制器完成请求的处理 , 而其架构建立在请求/回响的基础上 。3、此外 , 基于组件/事件的Web架构可以将Web系统分成多个组件 , 并交由事件处理器处理 。关键技术1、MVC模式在Web系统中 , 可以通过MVC模式 , 将数据处理、控制、数据显示分别进行处理 , 形成模型、控制器、视图等3个模组 , 这3种模组需要採用控制器进行合成 , 这种MVC模式能够非常好地解决Web系统经常出现的缠绕问题 , 从而使得Web系统的架构更加清晰和顺畅 。但是MVC模式需要通过跨页面的PHP来对模型和控制器进行连线 , 而在PHP完成数据分析后就会收回 , 无法实现PHP的跨页面操作 , 因此要进一步对NVC模式进行最佳化和技术改进 。这种情况下 , 比较好的办法就是在对PHP回收之前就将PHP信息存在效据库中 , 然后在MVC模式需要PHP 时可是随时从资料库中调用 。但这就需要经常调用资料库的信息 , 工作效率非常低 。另外一种方式就是採用被动MVC , 这种方式的模型与MVC其他结构是没有关联的 , 这就实现了不需要PHP访问其他页面 , 也不需要建立资料库 , 大大增加了运行效率 。因此 , 这种被动MVC模式是目前比较有效的MVC模式 。2、视图层在Web项目开发过程中 , 前端设计和程式设计很难达到协调一致 。这就需要将页面设计和程式设计进行分别管理 , 然后在统一协调 , 这种方式能够比较好地解决这个问题 。一般情况下 , PHP中可以利用块将显示和程式进行分别处理 , 在採用MVC模式时模板一般在视图层 。MVC的模板可以为前端设计提供容易理解的语言 , 所以前端设计工作就能够开展HTVL模板的製作工作 , 然后PHP就可以套用这些模板 。因此 , 通常情况下视图层一般使用 Smarty模板 , 这种模板是一种比较简单的模板 , 也可以利用PHP模板进行程式显示 , 最终的目标就是将前端设计和程式设计成功进行分离 。3、数据访问层PHP框架开发中处理好Web系统中的程式和资料库的分离也是非常重要的 。这就需要PHP框架中的数据访问层技术 , 这种技术能够非常好的将程式和资料库进行分析 , 也就是通过数据关係映射技术对两者进行分离 , 这种技术简称ORM技术 。数据关係映射技术是把原数据中的程式和资料库关係映射在资料库里面 , 但是由于技术的複杂性 , 这种映射效率也是非常低的 。为降低PHP数据访问层的複杂性 , 在PHP框架开发过程中活动记录模式不断被开发并已经得到广泛套用 。活动记录模式就是将每一条数据记录都包装为一个对象 , 这种模式能够极大地提高资料库相关程式的开发速度 。但是这种方式在处理关联表时 , 即使只提取一条记录 , 其他与之相关的所有记录也都会被包装为对象 , 这就会造成效率的急剧下降 。对于需要频繁更新数据的情况 , 由于所有数据都需要被封装为对象 , 更新对象属性后将对象存入资料库才能完成数据更新 。因此 , 在PHP框架开发的数据访问层中使用活动记录模式的效果仍不理想 。对于轻量级的PHP框架 , 资料库的操作更加适合採用简化的资料库访问层方式 。表数据入口模式与活动记录模式相比 , 只是对数据表进行封装 , 而不是封装每一个记录行 。与PHP强大的关联数组相结合 , 表数据入口模式能够高效、灵活地操作大量的数据 。由于表数据入口模式不需要对记录进行封装 , 所以说表数据入口操作的是纯数据的 , 而非封装了数据的对象 。表数据入口模式可直接对资料库进行操作 , 这使得表数据入口模式具有非常高的数据操作效率 。表数据入口模式在数据表层面上封装数据操作更加简单实用 , 适合用在轻量级的PHP框架中;由于複杂性降低 , 表数据入口模式也可以大大降低用户的学习成本;表数据入口模型不封装记录 , 因此可以直接运算元据库 , 且表数据入口模式中的数据以数组的形式保存 , 利用PHP关联数组的优势 , 执行效率比活动记录模式高得多 。常见框架下面介绍几个主流的PHP框架 。(1)Zend FrameworkZend Framework是由Zend公司开发的PHP框架 , 可用于开发Web程式和服务 。Zend Framework採用MVC架构模式来分离应用程式中不同的部分 , 从而方便程式的开发和维护 。(2)CakePHPCakePHP是一个运用了诸如ActiveRecord、Association Data Mapping、Front Controller和MVC等着名设计模式的快速开发框架 。该框架的主要目标是让各种层次的PHP开发人员都能快速灵活地开发健壮的Web套用 。(3)YiiYii是一个基于组件的高性能PHP框架 , 用于开发大型Web套用 。Yii採用严格的OOP编写 , 并有着完善的库引用以及全面的教程 。Yii几乎提供了如今Web2.0套用开发所需要的一切功能 , 事实上 , Yii也是最有效率的PHP框架之一 。(4)ThinkPHPThinkPHP是一个由国人开发的快速、兼容而且简单的轻量级PHP开发框架 。诞生于2006年初 , 原名FCS , 2007年元旦正式更名为ThinkPHP 。ThinkPHP遵循Apache2开源协定发布 , 从Struts结构移植过来并做了改进和完善 , 同时也借鉴了国外很多优秀的框架和模式 。使用面向对象的开发结构和MVC模式 , 融合了Struts的思想和TagLib(标籤库)、RoR的ORM映射和ActiveRecord模式 , 封装了对资料库的常用操作 , 单一入口模式等 。在模板引擎、快取机制、认证机制和扩展性方面均有独特的表现 。(4)CodelgniterCodelgniter(CI)也是一个比较老牌的PHP框架 。和ZF相反 , 它非常小巧 , 核心类库仅有1MB左右 。使用起来比较简单 , 代码框架遵循常见的MVC结构 。但是CI的类库封装得还不够精细 , 某些框架层次感觉设计得过于烦琐;另外CI的文档做得不是很好 , 特别是缺乏良好的中文文档 , 这大大阻碍了CI框架在国内的普及 。局限性虽然国内外PHP开发框架已经有很多 , 但是仍然存在一些问题 。总结如下:(1)忽视PHP语言本身的特点 , 现有的PHP开发框架的逻辑分层耦合度高 。其中模型层对资料库设计的依赖性明显 , 代码重用性低 。当资料库表发生改变时 , 需要开发人员对系统做大量的修改 , 不利于系统后期的扩展 。(2)现有框架的SQL注入防御效果不佳 。大部分框架主要对已知的SQL注入攻击技术进行了基础防御 , 很容易被入侵者通过其他手段绕过安全检测 。