PHP框架优缺点抽象总结

Wesley13
• 阅读 413

近期观察研究了几十个php框架,在此总结下一些框架的常见问题,总结下怎样的框架容易受欢迎。

php框架之问题一: 为了实现框架而框架。

    著名的诗人白居易说“文章合为时而著 歌诗合为事而作”, 对于程序而言,也要走到为解决问题为出发点;对框架而言,应走到为帮助程序解决问题为出发点,则自然步步为营,从理论到实践都合情合理,获得各个角落的用户支持。 但是很多框架不是这样的,它们从代码到作者自述都洋溢着一种对实现某些模式如MVC的喜悦,它们会说,看老子多牛逼(当然语言没有这么明显),用不到若干k代码就实现了MVC实现了模板系统实现了路由! 但是,作者们,你的框架目的是实现了这个模式,对用户来说,他们千方百计寻找或者偶然邂逅您这个框架,为的也是为了实现这些模式吗?

php****框架之问题二: 能做到,但没让人明白怎样做。

    也有很多框架,它们出于作者们多年实战,从刀耕火种茹毛饮血发展到面向对象第二次机器人世界大战,战无不胜攻无不克。但是,仅限于在作者手中。换到用户面前,就好像把钢铁侠N代丢给了一个收破烂的,因为没有足够的说明, 没有文档没有注释没有范例没有作者联系方式。怎么办,用户不知道,他们中很多人会因为看不懂这框架用不起来,或者部分看懂,把它拆解掉,变成回收利用的金属,加到自己的里面。嗯嗯这里面这个lib还是不错的,其他的,其他的太复杂了。

在这里暂停一下,有许多框架因为此二罪并罚,死掉了,不是吗? 那些你再找不到主页的框架,那些作者自己也懒得更新的框架。

php框架之问题****三: 复杂规则

    此类框架的特点在于,作者们除了实现某些模式外,也意识到必须让用户们明白如何用此框架斩妖除魔。但是,此框架虽然借鉴了很多其他框架思想的,万万不能让皇上们看出这其实是以前死掉的那个大明湖畔的夏雨荷的后代,必须换一种方式做同样的事情!比如,我们可以用数组做为各种配置的灵魂! php的数组实在太好用了, 我们只需要告诉用户,定义一个数组,里面写上某些东西,程序就会帮用户自动的做很多事情了。但是写什么东西好呢,让我们用一些语义化的英文单词吧。然后,再实现一套解释这些单词意义的程序…… ok,一大堆的词汇与调用规则,匹配着框架的各种概念,用户抓狂了? 

php框架之问题****四: 独门绝技

    本框架有很多的lib,你只要按本框架规则(征服第三条,征服第二条),并且使用本框架load进来就可以用了! 不过,这个lib是必须继承本框架里某个类的,然后配合core使用。还有,有些文件你必须放到某些路径下……

php框架之问题****五: 和Java一样!

    也许你是一个非IT专业出身,半路出家为了养家糊口学php的草根,内心中一直若隐若现对牛逼语言和“企业级”开发的敬畏?从现在开始,本框架可以让你和牛逼的J2EE一样遵循23种设计模式引入各种容器,对象,xml,让你从此人生充满阳光充满自信。 比如,以后做个页面上面显示helloworld就不要写echo ‘helloworld’这种不入流的菜逼代码了,你要用我们这种参考了Java企业级框架的框架,先写一个XML,里面配置配置,这叫注入!然后,写一个entity,一个dao,一个控制器,一个model,一个view……最后在某处你写一个对象,里面不要用echo,而是调用某个其他对象来输出,这样就不会耦合得太厉害了,从而实现要修改helloworld为hellokity,就不必改你核心代码,只要去跟踪下这n个文件,找到定义hello的那个接口,找到实现hello的那个类,照样搞 个kity实现此接口……最后和你一起写代码的同事找不到world在哪里的时候,你就告诉他去读懂框架,源代码都在哪里还看不懂先学一下基本的架构思想!顺便上网发个帖鄙视一下现在的php的IT培训质量很差。

但是怎样是比较好的php框架呢?

一,为解决问题而生

为了加速开发,为了帮助开发者少写枯燥代码而生。提供一定数量的开发辅助函数工具(lib,helper……),比如zend,yii,CI,kohana等

二,对框架的解释充分,坚持,彻底,与时俱进

有框架的主站,充分的细致到每个调用函数的文档(包括注释,API手册等),

有维基,论坛,至少能让用户有地方提问题建议,主开发者与用户交互活跃。

例如:CI最突出的地方是其网站文档。

三,独到深厚的设计思想

独到而不独门,能够保持生命力,不是依靠别人不能借鉴的紧密耦合的逻辑,而是拥有一套站得住脚的设计思想,让人感到处处合理,与其费尽心机扒其精华重复造轮子不如直接皈依。让人感到与其使用java做某些事不如用它做。

四,与主流工具兼容

支持mysql,jquery等是起码的,如果你发现了一套仅封装oracle的orm框架还很火请告诉我。

五,分清主次,突出主要特点

框架的主要优点是什么必须明确。用户苦苦寻找并且花费时间下载阅读的绝不是一个帮他们用另外一套语法在html的head里载入js和css的玩意。

也许某些框架不是一个lib大全,但是只要突出自己特点,还是会有一些需要者支持。

六,强调用户的自由

不强迫用户遵循某些模式。在多数情况下,用户最需要的是不择手段快速解决需求的方法,而不是实现了xxx模式或者某种“思想”。强制要求用户采用某些逻辑进行开发会导致其内心反感,并且,毕竟不存在万能的普遍适应各种场景的最好的模式,让用户能够在控制器里写输出是很重要的优点,尽管这不入流。

最后,感谢所有开源框架的开发与贡献者,本文尽管对一些现象有所揶揄,但无碍我对各种自由思想开源的尊重。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这