您好,欢迎访问三七文档
PHP与开发框架Haohappy2007.02.09主要内容什么是框架PHP开发是否需要框架如何使用框架进行PHP开发ZendFramework简介分别使用传统方式和ZendFramework开发一个文章管理发布系统细节问题MVC,数据库,模板,权限控制,AJAX等借鉴其它语言及框架RubyonRails什么是框架?框架,即Framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。注意,框架体现了程序的设计思想,但又不只是规划性的东西,它已经实现了部份核心代码。简单说就是使用别人搭好的舞台,你来做表演,但你要按照一定的规则。框架一般是成熟的,不断升级的软件。PHP开发是否需要框架使用框架的好处面向对象开发,有成熟的设计思想可以借鉴MVC分层,避免业务层与表现层混合,有利于后续开发有固定的程序结构和编码规范,代码易分享,有利于团队协作实战—一个PHP程序的演化假设我们要开发一个文章发布管理系统ArticleSystem需要实现的功能有:Add新增文章Edit编辑文章Delete删除文章List文章列表View查看某篇文章传统的开发方式新建一个目录includes新建一个文件functions.inc.php编辑functions.inc.php编写下面几个函数:addArticle(),editArticle(),delArticle(),listArticle()includes/functions.inc.php?phpfunctionaddArticle(){}functioneditArticle(){}functiondelArticle(){}functionlistArticle(){}functionviewArticle(){}?ArticleSystemincludesarticle.phpfunctions.inc.phpdb.inc.php在根目录下创建一个article.php测试一下,新增文章=add编辑=edit&id=2浏览=view&id=3article.php?phprequire_once('includes/functions.inc.php');$action=$_GET['action'];$id=$_GET['id'];switch($action){case'add':addArticle();break;case'edit':editArticle();break;......}?viewArticle()示例?phpfunctionviewArticle($id){$sql='select*fromarticlewhereid='.$id;//Getqueryresults//OutputHTMLresults}?问题代码冗长很多代码不容易组织成函数,导致代码重复,容易造成“复制-粘贴”型开发习惯业务层和表现层混合改进ArticleSystemincludesarticleAdd.phpfunctions.inc.phpdb.inc.phparticleEdit.phparticleDel.phparticleList.phparticle.php控制器的雏形拆分代码,把每个功能独立为一个文件。通过一个article.php来选择访问某个文件。?phpswitch($action){case'add':include(‘articleAdd.php’);break;case'edit':include(‘articleEdit.php’);break;......}?模块化开发的基本思想改进后的viewArticle()?phpfunctionviewArticle($id){$sql='select*fromarticlewhereid='.$id;//Getqueryresultsreturn$arrayResults}//在业务代码中仅进行数据处理,不显示?然后将$arrayResults数据输出到模板,再进行输出再改进ArticleSystemincludesarticleAdd.phpfunctions.inc.phpdb.inc.phparticleEdit.phparticleDel.phparticleList.phparticle.php使用模板系统,把业务层和表现层分开templatesarticleView.phparticleView.tplarticleAdd.tpl迈向MVC其实在改进代码之后,我们的程序已经很接近一个MVC形式的结构ArticleSystemincludesarticleAdd.phpfunctions.inc.phpdb.inc.phparticleEdit.phparticleDel.phparticleList.phparticle.php控制器的雏形使用模板系统,把业务层和表现层分开templatesarticleView.phparticleView.tplarticleAdd.tplModelControllerView?这算是Model吗?真正的Model不直接与视图进行交互MVC绝大部份PHP框架以MVC模式为基础来划分结构:模型(Model):就是封装数据和所有基于对这些数据的操作。业务层视图(View):就是封装的是对数据显示,即用户界面。表现层控制器(Controller):就是封装外界作用于模型的操作和对数据流向的控制等。传统方式总结面向过程开发的优点:方便,快捷尤其适合于中小型项目缺点:项目规模增大后,会出现很多地方代码重复“抽象困难”通常缺乏良好的总体架构设计,不利于后续开发使用框架开发PHP框架层出不穷,现在最流行的有:ZendFrameworkCakePHPSymphonySeagull使用ZendFrameworkapp目录为站点的核心部份内部控制器ControllerController“肥大”问题,拆分ZF提供的控制器“Module”功能,可以把ArticleController.php拆分成一个目录下的多个文件?phpclassArticleControllerextendsZend_Controller_Action{private$article;function__construct(){$this-article=newArticle();}publicfunctionlistAction(){$articles=$this-article-fetchAll($where,$order);$this-view-articles=$articles;echo$this-view-render($this-tplDir.'articleList.php');}publicfunctioneditAction(){}?模型Model?phpclassArticleextendsZend_Db_Table{protected$_name='article';protected$_primary='ArticleID';//$data参数来自于POST过来的变量数组functionaddOne($data){try{$rows_affected=$this-insert($data);}catch(PDOException$e){echoExceptioncaught:{$e-getMessage()}\n;exit;}}}?Zend_Db_Table类似于大家常用的mysql.class.php,但更强大,默认绑定了数据表,各种查询方法,大部份情况下不用写sql;使用PDO,更加安全。视图ViewZend_ViewZend_ConfigZend_Session+Zend_Auth+Zend_Acl用户认证、权限、状态维持“三件套”举个例子ZendFramework传统方式:=view&id=2对搜索引擎友好使用框架开发易于维护,改进和扩展通过类的继承和类方法的覆写,非常方便可以定制出自己想要的扩展后的对象。易于分享给第三方程序员,如发布一个API这是为什么大家分享PHP代码时,都是写成类库,而不是函数的原因。关于RubyonRails目前应该是最佳设计思想的WEB开发框架,FrontController,Router,View等都与ZF差不多举个例子,比ZendFramework先进的地方:1。Controller与View的变量共享,不需要显式赋值;2。可指定数据表间的各种关系,如一对一、一对多、多对多、外键关联等,如classLineItemActiveRecord::Basebelongs_to:productendRoR使用的是ActiveRecord模式,而ZF默认使用的是TableGateway模式。区别:对象映射到一条记录VS对象映射到一个数据表目前PHP还很难完美地模仿RoR,因为Ruby语言的动态特性
本文标题:PHP开发框架
链接地址:https://www.777doc.com/doc-1539470 .html