php开发用框架到底有必要安装挡泥板没有必要

&&&&&& PHP作为一门成熟的WEB应用开发语言,已经深受广大开发者的青睐。与此同时,各式各样的PHP开发框架也从出不穷,面对如此多而且良莠不齐的开发框架,开发者们想必都会眼花缭乱,不知道该选择用哪个。其实并没有一个标准来衡量哪个开发框架就是最好的,开发者们需要根据自己的需求和项目要求来选择。今天蝉知小编和大家交流分享下开发者们在选择PHP开发框架时应该考虑哪些因素。
1.项目需求:定制开发 VS 所见即所得的功能
选择合适的开发框架首先是基于项目需求考虑的。如果你的项目需求都是一些基本通用的功能,通过一些基本的插件或组件就能实现,那完全可以考虑使用诸如Joomla, 、WordPress、蝉知系统这样的CMS系统,因为这些CMS系统为你的开发工作提供了足够的基本插件和组件。但如果你的项目需求比较特殊,并需要定制设计开发,那么我们的选择应该倾向于像Zend、CakePHP、ZentaoPHP、Yii等这类开发框架,这些开发框架提供了函数库,满足开发者在此基础上根据需求定制开发。
2.健全的架构:设计模式
&&&&&& 大多数的开发框架采用的都是MVC设计模式,这也是被广泛应用于WEB开发的一种设计模式。在使用这些开发框架之前,开发者们需要认真分析它的MVC模式是如何实现的,比如像Zend这样的框架在实现MVC时自由度比较高,并允许开发者对其自定义修改,但像Yii这样的框架,其MVC实现比较严格,开发者必须遵守框架制定的规则。所以小编个人在选择开发框架时都会考虑一个问题,开发者与该框架到底谁是谁的工具。
3.数据库访问:提高数据操作效率
&&& 使用开发框架的一个很大优点就是可以重用数据库访问层。一些框架提供了ROM支持,方便数据库编程,也有一些框架比较人性化,注重开发者的自由度,比如zentaoPHP框架。zentaoPHP虽然没有去实现ORM或者ActiveRecord这样的功能,但是它为开发人员提供了足够的自由发挥空间。框架里面提供了一个简单方便的数据库访问对象类DAO,并且在封装DAO的时候尽可能的兼容标准的sql写法,这也是小编用的最顺手的开发框架之一。所以小编不得不重申老观点,&无论选择什么,适合自己的才是最好的。&
4.安全机制:防御应用程序漏洞
&&& 一款优秀的开发框架需要健全的安全机制来防御WEB应用程序漏洞,比如跨站脚本攻击(XSS)、跨站请求伪造攻击(CSRF)、Cookie攻击等。尤其对于那些主流的、开源的开发框架,更是黑客攻击的热衷对象。开发人员在项目开发过程中必须意识到这些可能存在的漏洞,框架也应该有相关的指导文档,帮助开发者防御这些web应用漏洞。
5.文档和社区支持:降低学习曲线
&&& 开发者们自然都希望框架功能完善强大的同时,又能够降低其学习成本。一款成熟的开发框架应该有活跃的社区支持、详细的参考文档、丰富的示例代码,以帮助开发者们能够轻松快捷的掌握框架功能。
&&& 每款开发框架都有其优点和缺点,开发者们需要根据自己的项目需求和框架的各自特点,综合考虑到底选用哪个开发框架最合适。以上小编只是列举了几个常见参考因素,如果大家还有其他补充,欢迎和大家一起分享讨论,我们共同学习,共同交流,共同进步。
更多内容:http://www.chanzhi.org/?u=xcj&a=cnblog
阅读(...) 评论()利用织梦的框架,是不适合做二次开发?-php-电脑编程网利用织梦的框架,是不适合做二次开发?作者:pengboy 和相关&&我正在熟悉织梦,然后自己做一个项目,但是用了几天,感觉不适合自己的项目,也可以自己对织梦理解不深,做新闻,资讯系统,还是比较方便的,但是如果要在模板上加一些交互性的操作,就比较麻烦&member会员下面的文件夹,用的框架很简单,比如访问一个页面
order. ,这个页面就加载一个 order.htm的静态页面,order.htm 只是显示网页的排版,而 order. 就是处理一些程序,这样分开很容易上手和操作。但是,像一些封面的模板,就不是很方便,我的理解主要是为了生成静态,提高访问速度,如果一个模板的页面地址是 zhuanxian.html,我如果要在这个页面上面写两个查询连接,如
zhuanxian.html?name=&北京&
zhuanxian.html?name=&天津&,这样情况就不容易实现,因为也没有SQL语句接收我的参数,但如果换成member里面的框架,就非常容易了还有一个地方让我觉得很不爽,就是搜索,搜索显示的页面全是同一页面,plur/serac.php,我看了半天还真不知道,如何搜索出来之后,显示指定的页面(也许是我对织梦还不够深入的了解)我想问,你们一般做二次开发时怎么做的,也是栏目的封面全都生成静态的吗?------回答---------------其他回答(30分)---------没有摸透,二次开发是吃力的熟悉代码思想,可能需要点过程,过了就好了
------其他回答(30分)---------很少在框架上做二次开发,不过如果要这样做,首先应该首先看他的开发说明文档。织梦的开发说明在这里:/help/development/
------其他回答(20分)---------dede
还是很不错的搜索 引用的虽说是一个模板 & 代码是死的
对搜所的结果进行判断啊
在指定你想的模板
------其他回答(20分)---------引用楼主 pengboy 的回复:但是如果要在模板上加一些交互性的操作,就比较麻烦此话何意?客户端和服务端的交互吗?如果使用,可以参考dede首页登录的实现方法。没有合不合适的产品或者框架,主要看你付出的努力和熟悉的程度。
------回答---------------其他回答(30分)---------
没有摸透,二次开发是吃力的熟悉代码思想,可能需要点过程,过了就好了
------其他回答(30分)---------
很少在框架上做二次开发,不过如果要这样做,首先应该首先看他的开发说明文档。织梦的开发说明在这里:/help/development/
------其他回答(20分)---------
dede
还是很不错的搜索 引用的虽说是一个模板 & 代码是死的
对搜所的结果进行判断啊
在指定你想的模板
------其他回答(20分)---------
引用楼主 pengboy 的回复:但是如果要在模板上加一些交互性的操作,就比较麻烦此话何意?客户端和服务端的交互吗?如果使用,可以参考dede首页登录的实现方法。没有合不合适的产品或者框架,主要看你付出的努力和熟悉的程度。
相关资料:|||||||利用织梦的框架,是不适合做二次开发?来源网络,如有侵权请告知,即处理!编程Tags:                &                    2009年7月 PHP大版内专家分月排行榜第三
2009年7月 PHP大版内专家分月排行榜第三
2008年10月 PHP大版内专家分月排行榜第二2008年9月 PHP大版内专家分月排行榜第二2008年4月 PHP大版内专家分月排行榜第二2007年12月 PHP大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。PHP开发框架比较
Laravel 是一个简单优雅的 PHP WEB 开发框架,将你从意大利面条式的代码中解放出来。通过简单、优雅、表达式语法开发出很棒的 WEB应用!但是通过使用我们发现Laravel在开发效率和运行效率上都存在瓶颈。如此优秀的框架都存在诸多问题,基于此我们在公司现有框架的基础上参照诸多框架(不限于php语言也参照java和ruby)的优点完成一个自主设计的框架。自此,YYUC框架的开发团队征集并完成组建,不断的讨论、编码、测试、内部开发和合作伙伴推广;一个完整的版本就此形成。
codeigniter
约定加自定义,视图需要手工指定。
约定加自定义,视图需要手工指定。
约定加自定义。
不利用配置文件的路由规则就可以自由的构建URL格式,一般的路由约定是:
类/方法/参数,这种约定不够灵活,YYUC的路由实现上可以更灵活。
laravel的统一分发虽然使路由的定义更加灵活的,但是个人觉得没必要。只要层次设计好有利于SEO和用户感官就好,没有必要独立定义。Laravel3之前开发和维护过程中查着路由表找控制器累不累啊。Laravel3之后解决了这个问题,有了自动路由的方法:Route::controller(Controller::detect());
手动指定加载的类,分为帮助类,和字典类等等。
自动加载。
插件形式自动加载,分为系统插件和用户插件等。
类较少时三个框架的加载速度相差不大,YYUC是自动加载,不用开发人员手动指定。Laravel也是这一原理,codeigniter调用load方法和直接include差不多,代码不够简洁明快。对于YYUC插件类较多时如超出500动态加载每次都要从众多文件中抽出所需要的类文件YYUC效率会有所下降。如果工程特别大,通用类文件特别多考虑以指定包名称的方式加载。如果只是单一模块下用到的类可以将类下载控制器文件夹下,以"_"开头,调用import方法加载该模块的类,父模块和子模块的类可以通过指明路径层级明确调用。
校验方式灵活。校验规显得有些杂乱
校验方式灵活,预置的校验种类全面。
建议将提交的数据都封装在模型中,有对应库表的用数据库模型,没有的用简单模型。重写校验方法实现校验。有利于数据的统一管理,与此同时特定校验的扩展性强。
各有优势,codeigniter的类加载本来就很丑了,再加上不同方式的校验规则,代码显的乱七八糟的。
类相对独立,并入框架内部要加一些框架的实例化方法。
框架基本上都是静态风格,太过个性化。把网络上开源的类引入框架中会显得格格不入。最好最为自定义的类放入项目中。要用这些类扩展框架就要对引入的类做大手术。
插件形式引入,对于大多输的类通常只需改下类的文件名就可以自动被调用。
还是喜欢自己写的框架,核心是核心插件是插件,核心越精简越高效越好,插件越强大越灵活越好。网络上这么多优秀的经过验证的类为什么不直接引入其中呢。
安全机制强大
只包含一般安全校验,如跨站提交等
自认为安全机制强大
codeigniter可以说把能做的安全防范机制都做了,laravel与其说是个框架倒更像一个路由分发的核心。很多安全问题需要自己考虑。YYUC参考了struct,Thinkphp以及codeigniter的安全验证方式,把能加的安全防范规则都加了,可能由于自己底层知识(包括php底层,web服务器底层)的局限性还存在漏洞也是可能的。但是用YYUC发现漏洞可以第一时间改掉。用其他的框架,如果万一有漏洞存在,要么要修改他的核心代码要么要等待版本更新是神被动的。
传统的MVC模式,但是Model层不够灵活,与库表数据的一一对应并不好。
最新的5.3+支持,先进的语法风格。显得有些另类
传统的MVC模式
laravel运用了最新的5.3规范,引入命名空间的概念,像namespace use等语法都是最新引入,但是部署上有局限性。laravel引入了类似JS的匿名函数回调机制,开发者可能要在思维角度上有所转变。而且大量的回调更利于假设高性能的分发程序,不适合传统的Web网站开发。所以laravel只是底层运用了这些模式,对于开发者来说还是传统的MVC模式。
数据库支持
功能强大,全面支持。
PDO规范支持Mysql和Sqlserver不支持Oracle
只支持Mysql
YYUC目前只支持Mysql数据库,但是封装的DB类做了很好的多库表,主从表的支持(主要参照的Thinkphp),超大数据量的系统也是可以应对的。对于其他数据库以后版本想以插件的形式。在精而不在多。
效率与开销
相应速度快,内存开销一般。
相应速度较快,内存开销稍大。
生产模式下相应速度快,内存开销很小,开发模式下需要编译速度会稍微慢一些。
个人认为对PHP来说,框架类的层级过多并不一定是好事。
PHP的初衷就是敏捷开发快速相应,Http并不是常连接的,处理好每次请求也就处理好了整个网站,好的框架并不一定要设计成像Spring那样包罗万象。
开发运行效率示例:
下面的例子分别利用三种框架做了个数据插入到Mysql数据库并查询输出的示例,示例只是实现基本的增加查询功能并没有进行数据校验。下面的例子中将展示不同框架代码量的,公平起见运行效率的统计方法没有用框架底层的调试类而是采用原生的php方法计算运行时间和内存使用量:
CREATE TABLE `test_article` (
& `id` int(11) NOT NULL auto_increment COMMENT '主键',
& `title` varchar(255) default NULL COMMENT '标题',
& `content` text COMMENT '内容',
&&`updated_at` datetime default NULL,
&&`created_at` datetime default NULL, --laravel必须这两个字段(和Rails的一模一样)
& PRIMARY KEY& (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
代码量展示:
新增页面:
&!doctype&html&
&&&&&&&&meta&charset="utf-8"&
&&&&&&&&meta&http-equiv="X-UA-Compatible"&content="IE=edge,chrome=1"&
&&&&&&&&title&测试新增&/title&
&?php&echo&Form::open('test/new','POST');?&
标题:&?php&echo&Form::text('title',$title);?&
内容:&?php&echo&Form::text('content',$content);?&
&?php&echo&Form::submit('提交');?&
&?php&Form::token()?&
&?php&echo&Form::close();?&
如果要实现表单自动填充的话还是要手动指定的有些麻烦
新增成功页:
&!doctype&html&
&&&&&&&&meta&charset="utf-8"&
&&&&&&&&meta&http-equiv="X-UA-Compatible"&content="IE=edge,chrome=1"&
&&&&&&&&title&保存成功&/title&
&h1&保存成功&/h1&
展示页面:
&!doctype&html&
&&&&&&&&meta&charset="utf-8"&
&&&&&&&&meta&http-equiv="X-UA-Compatible"&content="IE=edge,chrome=1"&
&&&&&&&&title&显示数据&/title&
标题:&?php&echo&$title?&&br/&
内容:&?php&echo&$content?&&br/&
class&Article&extends&Eloquent {
&&&&&&&public static&$table&=&'test_article';
class&Test_Controller&extends&Base_Controller {
&&&&&&&/**
&&&&&& &*&页面展示
&&&&&& &*/
&&&&&&&public function&action_init()
&&&&&&&&&&&&&&return&View::make('test.new');
&&&&&&&/**
&&&&&& &*&保存数据
&&&&&& &*/
&&&&&&&public function&action_new()
&&&&&&&&&&&&& $title =& Input::get('title');
&&&&&&&&&&&&& $content = Input::get('content');
&&&&&&&&&&&&& $article =&new&A&&&&&&&&&&&&
&&&&&&&&&&&&& $article-&title&= $
&&&&&&&&&&&&& $article-&content&= $&&&&&&&&&&&&&
&&&&&&&&&&&&& $article-&save();
&&&&&&&&&&&&&&return&View::make('test.success');
&&&&&&&/**
&&&&&& &*&显示数据
&&&&&& &*/
&&&&&&&public function&action_show($id)
&&&&&&&&&&&&& $article = Article::find($id);
&&&&&&&&&&&&&&return&View::make('test.show',array('title'=&$article-&title,'content'=&$article-&content));
CodeIgniter:
新增页面:
&!doctype&html&
&&&&&&&&meta&charset="utf-8"&
&&&&&&&&meta&http-equiv="X-UA-Compatible"&content="IE=edge,chrome=1"&
&&&&&&&&title&测试新增&/title&
&?php&$this-&load-&helper('form');?&
&?php&echo&form_open('test/tonew');&?&
标题:&?php&echo&form_input('title');?&
内容:&?php&echo&form_input('content');?&
&?php&echo&form_submit('mysubmit',&'提交');?&
同样的表单自动填充也不省事,不对称的标签格式总让人心里不舒服
新增成功页:
&!doctype&html&
&&&&&&&&meta&charset="utf-8"&
&&&&&&&&meta&http-equiv="X-UA-Compatible"&content="IE=edge,chrome=1"&
&&&&&&&&title&保存成功&/title&
&h1&保存成功&/h1&
展示页面:
&!doctype&html&
&&&&&&&&meta&charset="utf-8"&
&&&&&&&&meta&http-equiv="X-UA-Compatible"&content="IE=edge,chrome=1"&
&&&&&&&&title&显示数据&/title&
标题:&?php&echo&$title?&&br/&
内容:&?php&echo&$content?&&br/&
class&Article_model&extends&CI_Model {
&&&&&&&/**
&&&&&& &*&构造函数
&&&&&& &*/
&&&&&&&public function&__construct()
&&&&&&&&&&&&& $this-&load-&database();
&&&&&&&/**
&&&&&& &*&新增函数
&&&&&& &*/
&&&&&&&public function&to_new()
&&&&&&&&&&&&& $data =&array(
&&&&&&&&&&&&&&&&&&&&&&&&&&&&'title'&=& $this-&input-&post('title'),
&&&&&&&&&&&&&&&&&&&&&&&&&&&&'content'&=& $this-&input-&post('content')
&&&&&&&&&&&&& );&&&&
&&&&&&&&&&&&&&return&$this-&db-&insert('test_article', $data);
&&&&&&&/**
&&&&&& &*&查询一条数据
&&&&&& &*&@param&$id
&&&&&& &*/
&&&&&&&public function&show_one($id)
&&&&&&&&&&&&& $query = $this-&db-&get_where('test_article',&array('id'&=& $id));
&&&&&&&&&&&&&return&$query-&row_array();
无论怎样类初始化后DB连接就建立了,而且数据查询很不方便,完全抛弃了POJO类的概念,要手动加属性这点开发效率上是无法和YYUC和laravel相比的。
class&Test&extends&CI_Controller {
&&&&&&&/**
&&&&&& &*&构造函数
&&&&&& &*/
&&&&&&&public function&__construct()
&&&&&&&&&&&&&&parent::__construct();
&&&&&&&&&&&&& $this-&load-&model('article_model');
&&&&&&&/**
&&&&&& &*&页面展示
&&&&&& &*/
&&&&&&&public function&init()
&&&&&&&&&&&&& $this-&load-&view('test/new');&&&&&&&&&&&
&&&&&&&/**
&&&&&& &*&保存数据
&&&&&& &*/
&&&&&&&public function&tonew()
&&&&&&&&&&&&& $this-&article_model-&to_new();&&&&&&&&
&&&&&&&&&&&&& $this-&load-&view('test/success');
&&&&&&&/**
&&&&&& &*&显示数据
&&&&&& &*/
&&&&&&&public function&show($id)
&&&&&&&&&&&&& $data = $this-&article_model-&show_one($id);
&&&&&&&&&&&&& $this-&load-&view('test/show',$data);
新增页面:
&!doctype&html&
&&&&&&&&meta&charset="utf-8"&
&&&&&&&&meta&http-equiv="X-UA-Compatible"&content="IE=edge,chrome=1"&
&&&&&&&&title&测试新增&/title&
&form&action="new.html"&method="post"&
标题:{$article-&text('title')}
内容:{$article-&text('content')}
&button&type="submit"&提交&/button&
新增成功页:
&!doctype&html&
&&&&&&&&meta&charset="utf-8"&
&&&&&&&&meta&http-equiv="X-UA-Compatible"&content="IE=edge,chrome=1"&
&&&&&&&&title&保存成功&/title&
&h1&保存成功&/h1&
展示页面:
&!doctype&html&
&&&&&&&&meta&charset="utf-8"&
&&&&&&&&meta&http-equiv="X-UA-Compatible"&content="IE=edge,chrome=1"&
&&&&&&&&title&显示数据&/title&
标题:{h $article-&title}&br/&
内容:{h $article-&content}&br/&
安全起见,视图中转义要输出的字符
简单的数据处理,没有验证、虚拟字段填充与回填、复杂数据计算等操作,使用自动模型构建就好,所以完全没必要自定义模型
初始化和新增:
if(Request::post()){
&&&&&&&//数据提交
&&&&&& $article =&new&Model('article');
&&&&&&&if($article-&load_from_post()-&save()){
&&&&&&&&&&&&&&Page::view('success');
&&&&&&&//初始化显示
&&&&&& $article =&new&SampleModel('article');
数据显示:
$article =&new&Model('article');
if(!is_numeric(get(1)) || !$article-&find(get(1))-&has_id()){
&&&&&&&//数据不合法或者不存在跳转到404页面 上两个框架判断起来稍显麻烦就没写 如果有这种情况上两个框架会直接抛异常的
&&&&&& goto_404();
已经自动集成阻止跨站提交模块
性能消耗:
三个框架均设置为生产模式。
新增展示:
内存使用情况:2989432bytes运行时间:0.4秒
数据保存:
内存使用情况:3433792bytes运行时间:0.秒
数据显示:
内存使用情况:3374368bytes运行时间:0.2秒
CodeIgniter:
新增展示:
内存使用情况:2643704bytes运行时间:0.秒
数据保存:
内存使用情况:2471400bytes运行时间:0.秒
数据显示:
内存使用情况:2572744bytes运行时间:0.8秒
新增展示:
内存使用情况:1850760bytes运行时间:0.9秒
数据保存:
内存使用情况:2076544bytes运行时间:0.秒
数据显示:
内存使用情况:2075152bytes运行时间:0.6秒
laravel是非常优美和整洁的php框架,路由功能非常强大,更像一个路由核心,有着良好的请求分发和路由控制,代码风格整齐划一。但是似乎laravel扩展的功能太过简单,没有太多的具体实现。最重要的是所有请求都要走路由,看了它的2.x和3.x版新版本才有默认规则,最新版简直就和ROR一模一样,比如数据表结构什么的连字段的要求都是一样的,Rails虽好也不至于模仿的这么真真切切。基于laravel的前台的各种控件很少,网上甚至没有一个基于laravel的完整的例子。中文文档还在翻译中对于新人来说用laravel开发效率可能会大打折扣,而且laravel在安全性方面考虑的并不多这也是让人头疼的一部分,好像只有一个防止跨站提交的过滤器。个人认为最重要的是选择使用laravel人现在并不多。框架结构设计的非常优秀,但是还是稍显复杂的,引入了最新的命名空间,和闭包回调的机制,每次请求要加载的文件太多了或多或少的拖了性能,所以内存消耗方面laravel是最大的。
Codeigniter功能强大但是显得又过于杂乱了,特别是控制器和视图的对应上完全背离了约定大于配置这一原则,没有Rails的外部包裹机制,内部引入也显得页面和代码不分家。Codeigniter没有模型类的自动装载功能,实际开发起来效率就会有些低,视图代码不讲究对称让人看了不顺心。好像Codeigniter并没有自动的POJO类的概念,Model类侧很重Active Record模式,数据库的操作很大程度上依赖了手写。还有就是开发的时候没有显示的类调用,这样就得不到IDE友好提示,开发效率上多少会有影响的。
其实所有MVC的框架机制是一样,但是YYUC其中一个特点是按需加载,控制器是程序片段而不是一个类,通常的面向类的控制器如果对应10个请求的话那么每次页面请求都会无端的加载9段多余的其他代码。php不像Java常驻内存,每次请求能少加载些就少加载些。YYUC控制器中的变量是不需要显示的声明注入到视图中的,视图和控制器在同一个级别之下,这样即提高了开发效率又加快了代码的执行效率。YYUC的Model既有原始POJO类的特点也可以通过子类实现Active Record模式,可以在开发时灵活选择。通过插件规则YYUC内置了很多常用控件,像分页、日期,上传,图片截取,验证码、颜色选取、富文本编辑器、HTML5的视频音频兼容播放、HTML5的WebSocket兼容支持等等。
阅读(...) 评论()}

我要回帖

更多关于 到底有必要安装挡泥板 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信