1. 什么是 Phalcon

相比 Laravel,Yii,ThinkPHP,在国内 Phalcon 似乎并没有什么人用,甚至有很多人不知道这么一个PHP框架。Phalcon 是一个C拓展编写的全功能栈框架,支持MVC模式。性能是 Phalcon 的一个显著的特点。

还有一个C拓展框架,是鸟哥的Yaf,Yaf和Phalcon的区别在于,Yaf是一个架子而且只有一个架子,而Phalcon是全功能的,要什么有什么。

2. 为什么要学习 Phalcon

那么一个高性能的C拓展框架为什么用的人这么少呢。我揣摩了一下,主要有以下一些因素:

  1. 很多时候,PHP的性能瓶颈并不在PHP本身,而在于数据库,在IO,在并发等;再加上PHP7性能的提升,以及未来JIT出来后的进一步跃进,都使 Phalcon 的高性能的特点被掩埋,所以一般的中小项目,Phalcon的优势并不明显,但是学习成本却高得多,不划算。
  2. Phalcon的生态圈不够丰富。玩Phalcon的都会知道,Phalcon国内基本没什么社区,资料少得可怜,只有google英文资料才能解决问题,神奇的是,遇到问题里基本上google一下,通过phalcon官方论坛,Stack Overflow等,基本上都能解决你的疑惑。
  3. 学习成本高。很多人都说学习成本高,其实我在开发过程中发现,虽然遇到的坑是有,但是并不是说不能解决,说到底还是学习环境不行,生态不行。Laravel的学习成本其实也不低(相对于TP之类的),但是现在也是风生水起,国内的几个社区确实做得非常不错,特别是Laravel China的维护者,不仅是促进Laravel的发展,也在普及一些新的PHP知识。与其说学习成本高,倒不如说是没有前人填坑,只要坑填好了,后面的人就好走了。
  4. 不是项目的优先选择。其实我觉得这个是最主要的原因,一个团队在选择开发框架的时候,会考虑很多,性能并不一定是优先选择,往往效率是很多人会优先考虑的。那么在这面前,选择Laravel这种框架,熟悉Laravel的开发者,可以利用Laravel生态,优雅而又高效地去完成任务,何必去装一个拓展然后慢慢踩坑呢(因为C拓展的框架看不到PHP源码不利于调试),再者,很多人会选择国内生态极好的TP框架速撸(真的很速,要多速有多速,目的是实现功能的话)。这样一来,用的人就少了,用的人少,流传不开,生态也自然就差了。

在我用一波下来,我觉得 Phalcon 确实是比较优秀的一款框架。未来PHP的发展方向,在我看来铁定是要求高并发高可用,所以Swoole成为了一个大杀器,Phalcon+Swoole是我比较青睐的一个搭配,再加上现在Docker已经逐渐成熟,搭建环境不再是问题了。

最后,学习多一门框架,并不是说为了用而学,多学一门框架我们就可以从这门框架中提炼出他的精髓,在选择时也多了一个选择。

3. 学习 Phalcon 能给你带来什么

其实我非常建议PHPer初期在用完ThinkPHP或者Yii之类的时候,来学一下Laravel或者Phalcon,当然我就是处于这个学习阶段,受益很大。

自己动手从头做一个项目来学习 Phalcon,会有很大收获,有这些好处:

  • 真正理解MVC架构
    你会开始思考很多,model 究竟是什么(新手或者被荼毒的PHPer);model层的应用与拆分;业务逻辑的拆分;前后台复用拆分;REST风格与传统控制器方法风格;大中小型不同项目的区别。因为这些东西都要你自己去设计,构造,即使你用Phalcon-devtools来生成项目。
  • 找到自己的方向
    从头开始做一个项目,如果你只有一个人,或者只是一个练手小项目;也许一开始想得很多,后端用什么技术啦,前端用什么先进的技术啦,什么vue啦react啦,前后端分离啦。当你开始时才发现,这样做一套下来,要学很多,而且前端更新太快了,顾不来。有时候精力有限,还有工作,并不能顾及这些骚操作,除非你真的想往全栈发展并投入大量精力。这个时候,你会发现,专注一个方向才是最主要的,比如专精后端(如果你选择了Phalcon,很大程度上你已经偏向后端了),学习算法,如何高并发,数据库瓶颈等等这些够你学的了;很多大公司面试,并不会考你前端如何,毕竟岗位是后端工程师,大公司里职责很分明,不会让你一条线通吃的。
  • 往底层发展
    Phalcon是C拓展的框架。学习到一定深度,就可以开始看看C,看看PHP拓展的开发了。

4. 学习的好去处

首先遇到问题,用google,而不是百度,百度一般找不到答案,而google一般可以,不然就用必应,但是最好google。

  1. 官方文档:https://docs.phalconphp.com
    Phalcon的官方文档是非常详细的,而且教学也很简单粗暴,入门就靠它。最近文档做了改版,体验很不错。
  2. 官方论坛:https://forum.phalconphp.com/
    Phalcon的官方论坛能解决大部分问题,你碰到的问题,别人也碰到过。
  3. Stack Overflow:https://stackoverflow.com/questions/tagged/phalcon
    在Stack Overflow上查找问题,一般碰到的问题,官方论坛上没有Stack Overflow上会有,基本上这两个论坛就可以解决大部分问题,如果还不行,就自己提问试试吧。
  4. Phalcontip:https://phalcontip.com/
    这个站点上面有很多很好的实践,也可以解决很多问题。

5. 系列文章

因为我自己用 Phalcon 用起来是非常爽的,我觉得把这些整理下来,一来填坑,二来自己以后也受用。

我准备整理出以下的文章,以后有时间抽空写写:

初学系列

踩坑系列

最佳实践系列

  • Phalcon最佳实践1:健壮的项目结构和代码
  • Phalcon最佳实践2:核心之model层的使用
  • Phalcon最佳实践3:model的批量操作
  • Phalcon最佳实践4:正确使用模型关联
  • Phalcon最佳实践5:数据库操作的几种方式和坑
  • Phalcon最佳实践6:ACL实现权限功能
  • Phalcon最佳实践7:分页及其拓展
  • Phalcon最佳实践8:过滤器的使用
  • Phalcon最佳实践9:使用缓存系统(前后端适配器)
  • Phalcon最佳实践10:数据库迁移
  • Phalcon最佳实践11:合理使用Notfound
  • Phalcon最佳实践12:构建composer支持的Phalcon项目
  • ……

拓展系列

  • 权限相关:ACL与RBAC
  • 如何设计博客系统文章的草稿,保存,发布,自动草稿等功能
  • 什么是元数据,如何应用
  • 结合PHPunit做测试
  • 开发时预留插件功能
  • ……