关于php原生开发与主流php框架使用心得

12,437 阅读8分钟

「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」。

本人是主要做php项目的,以前是从来不屑于用框架的,由于项目原因,这几年对比较流行的框架,都涉猎了一下,毕竟甲方是老大,人家制定让用什么,你必须要用,有时候你可以劝他们改变初衷,但有时候你只能遵从或者放弃,...至于因为这点原因放弃,那是不可能的,不过好在硬着头皮用了一遍之后,发现在开发效率方面确是大大提高。现在就谈一下我的一点感受。

1.PHP是世界上最好的web开发语言

PHP是世界上最好的web开发语言,这个无可辩驳,当然去掉web两个字,这毫无意义,网上很多喷子鼓吹的java,.net,python都差的远。

php有如下优点:

  • 简单易学。正是因为如此,才造就了php开发者人群的庞大和良莠不齐,但是我们不能因为阳光和空气获取起来毫不费力就说它不重要吧?这个是人的问题,不是开发语言的问题。
  • 灵活性高,和html、css高度融合。因为php本就是为web开发而生的,其他的语言都是从桌面程序和控制台程序发展起来的。
  • 服务器配置简单。网上一键配置多如过江之鲫,在没有比它更简单的了。
  • 对服务器要求低,和好兄弟mysql搭配,随便一台办公电脑都能跑的很溜。要是你用java+oracle,得专门买台服务器,你想用办公电脑当服务器,不用一百人访问就卡死你。我以前接手过一个公司的oa,同样功能用php做出来,万八个人访问起来毫无压力。

php的缺点:

  • 缺乏并发和事务处理机制。对于超大型的网站,数千万级访问来说,如果是新闻网站还好,可以采用生成html方式,基本毫无压力,但是对于一些纯纯动态的如oa(千万级访问的oa系统恕我孤陋寡闻,没见过)和复杂的事务流程来说,效率并不高,所以某宝的一些秒杀活动、12306订票、银行atm取款机等都用java或python,因为他们重要的不是浏览内容,而是事务处理,而且通常是多台服务器分布式并发执行。
  • 只支持web开发,不方便做 .exe文件。这个其实也不算缺点,人家本来就不是干这个事的,就像你拿着大刀长矛去厨房切菜非得说不如菜刀好用,让一个程序员去炒菜说不如新东方学徒,你非得这样,谁也没办法。
  • 语法不太严谨。变量不用定义就能用,这个我觉得很方便,另外php有严格模式,启用后变量必须声明才能用,你愿意你可以设置。另外说起这个我就特不习惯Python没有大括号的做法,说是优美,我去,如果要复制黏贴一段代码,光调整格式就费老大的劲,而且代码一长或者把代码拷贝的别的机器,很容易出错。

什么时候使用PHP

项目不大,如何判断这个呢,就看你需要几台服务器运行这个程序,如果有几十、几百台的话那就是大项目了。10台以内php都可以轻松应付。

2. 中型项目减少PHP压力的方法

对于千万级的中型项目,可以采用这些方法减少压力:

  • 数据库单独一台机器,或者几台机器(关键词:主从模式、数据复制、数据同步),记住把数据库放在几个地方比把网站代码放在几个地方要容易。
  • 采用二级域名,把几个功能分别放在几台服务器。你可以把session和公共变量保存在数据库中,保证无缝隙登录整合。

3. 原生开发VS框架

原生开发的优点:

  • 学习成本低
  • 雍余代码少,原本一个几百k搞定的小项目,用thinkphp得10M多
  • 执行效率高,毕竟框架要耗费很多资源
  • 安全性能高(如果你是高手),框架有时候存在漏洞,会让你的程序天然带入漏洞。
  • 程序配置开发灵活,不用遵从框架的路由规则

框架开发的优点:

  • 开发效率高,代码量少(这里指的是你自己写的代码)
  • 集成功能多,调用比较简单
  • 安全性能高(如果你是新手),毕竟写框架的人水平比你高,想的比你周到。
  • 代码打包后较大,因为包含了框架的代码,特别对于外包,你收了人家三万块,给你300k代码,人家总感觉不合算,用了框架,再加上一些图片,起码30M,当然你无耻点可以搞个几百M。这里你要说原生开发不会搞图片吗,可是人家一看php文件没多少,每个人文件打开才几十行代码,人家傻吗?

个人总结,对于业务逻辑不是很复杂,能用框架的还是用框架吧,确是省事很多。如果你很多功能用框架不好完成,那就用原生,没必要纠结太多。新手如果自己不能判断可以加老刘微信(jsjlaoliu),把你的功能发给我,我可以帮你判断下用什么框架合适。

4. 常见的php框架

4.1 Thinkphp(国产)

这是我目前使用最多的框架,也是国内使用人数最多的框架,日常开发中的大多数功能基本都包含了,如果没有的可以找一下扩展插件,强烈推荐。
支持php7、php8,对我这样的版本强迫症来说,对那些不支持php7以上的框架我都不戏使它(山大方言,不屑于使用它)。
另外从下一篇开始,我准备写个简单的Thinkphp6使用教程,有需要的可以关注我。

4.2 CodeIgniter

怎么说呢,CodeIgniter3.0我用着挺好的,使用频率超过Thinkphp,结果到了4.0,好像完全变了一个软件,易用性大大降低。而且这个框架更新比较慢。对于使用php7以下的(不含)建议使用CodeIgniter3.0,php7以上的还是用Thinkphp吧。

4.3 Laravel

传说中Laravel是一个简单优雅的PHPWeb开发框架,可惜本人不怎么优雅,感受不到,反而是被那些繁琐的配置搞的好乱。其优点是大量的第三方开源库,可以快速方便的实现模块功能,安全机制非常齐全,提交表单的数据验证(验证有差不多80种,能想到的基本都有),提交数据时产生随机_token验证,避免非法提交,能避免跨域攻击;继承了登录验证、权限验证的,这个的确很方便,有兴趣的朋友可以研究一下。

4.4 Yii

Yii采用严格的OOP编写,这个是它的主要特点,奈何我这个人不太喜欢严格,Yii的组件非常多,学习成本也有点高,据说适合用于开发大型Web应用。

4.5 Yaf

Yaf,全称YetAnotherFramework,是一个C语言编写的PHP框架,是一个以PHP扩展形式提供的PHP开发框架,相比于一般的PHP框架,它更快,更轻便,据说性能很高,不过我做的小项目,感受不出来,这个框架学习起来难度有点大,使用人数也不多,但是用它的几乎都是大公司,新浪好像就用它,百度以前也用过。做小项目就不要去了解了。想要进大厂的可以研究一下。

4.6 Cakephp

z这个和thinkphp很类似,据说think开始的时候就是参考的它,既然如此,我们还是用think吧,毕竟国产的,大家看得懂,遇到问题也容易找人请教。

4.7 Zend

ZendFramework(简写ZF)是开源的,主要用于Web应用程序的开发和服务,ZF采用MVC(Model–View-Controller)架构模式来分离应用程序中不同的部分方便程序的开发和维护。框架包很大,功能很多,学习起来成本有点大,性能并不是很突出,国内用的也很少,我没怎么研究过。

好了,本文就介绍到这里,php框架有不下千种,我这里都是介绍目前比较主流的php框架,对于疏漏的,大家可以留言补充,另外国产的框架其实也不少,但是大多个人开发的,所以没多做介绍。从下一篇开始,我将带领部分菜鸟开启Thinkphp6的学习之旅。