16

一个极简的PHP框架:zero-framwork

 3 years ago
source link: http://www.zhyea.com/2020/06/27/a-simple-php-mvc-frame-zero-framwork.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如标题所示,最近这两个月学着用PHP写了个东西,顺道产出了一个框架:zero-framework。

其实用PHP写东西这个事情去年就开始了,期间研究过typecho,体验了ThinkPHP还有两三个非常粗糙的所谓的极简框架(比我的zero-framework还要粗糙)。在多番折腾后最终用CodeIgniter写了一个CMS应用。

总体来说,CodeIgniter的轻量级和灵活性还是非常对我的胃口的。但是有两个地方不太容易接受:数据库操作上的种种自以为是和对IDE(PHP Storm)的不友好。尤其是后者,每次想查看一个方法的代码时都无法自由跳转实在是让人憋闷。所以后来干脆用java把整个功能又重新实现了一遍。

本来以为事情就这样了,但是维护VPS运行环境实在不让人省心,加上php虚拟主机的诱人价格,所以又将目光转回了PHP。不过这次我计划不使用任何框架,直接使用原生的PHP。另外也隐约想到在我的产品完成的时候,也许会产生一个框架。毕竟所谓框架最初也只是开发习惯的一个集合而已。

在整合了路由功能和数据库操作能力后,框架的雏形就已经有了。随着开发的进展、结束以及上线,zero-framework逐步成形——按我期望的样子。受CodeIgniter影响颇深,此外也不能说没有Java SpringMVC的作用,zero分成了Controller / Service / Model三层,也就是网络/业务/数据库三层。为了能在IDE中清晰地追踪方法调用,每层的对象都是显示创建的。显式创建对象这个事情并不是一种好的方案,而像ci那样通过load来避免重复创建对象会更好些。但是为了对IDE更友好些,最终采用了前者,因此在开发时也需要格外注意减少对象重复创建。zero的数据库操作使用了ActiveRecord的形式,不止提供了常规的快捷操作方案,也支持自定义SQL灵活查询。此外因为有多主题的需求,提供了主题切换方案。zero也就是这些特点了。毕竟初学PHP,而且只使用它完成了一个相对较小的需求,zero肯定有许多不完备的地方。

zero-framework的项目地址在 GITHUB/zero-framwork 。基于zero完成的产品是 Buffalo ,一个小说网站或CMS网站。有和我面临同样需求的同学可以参考下,毕竟有源码也有实例不是。

再聊些对PHP的看法,先夸优点:PHP不愧是最好的编程语言,入门相对简单(初学者就能产出一个框架),天生对WEB非常友好,类脚本语言修改和调试起来都非常简单快捷,应用hook可以灵活地实现AOP操作。不足之处是它提供的魔术方法很容易被滥用,弱类型语言也比较难得到IDE的充分支持,此外就是debug的繁琐了,PHP缺少一个足够好用的debug工具。另外作为一个Javaer,刚开始使用PHP时,对于内存操作这块儿充满了各种疑问。

也就这些可以说说了。最后还想废话一下:因为洁癖或者说是习惯就抛弃既有的成熟框架,反而花费大量时间和精力去造一个新的轮子,这并不是一种值得提倡的做法。但是人生苦短,代码既然能让我得到一点快乐,为何不稍稍允许自己任性一点呢。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK