我是一名专注于PHP项目开发的开发者。以前我从未考虑使用框架,但由于项目要求,近几年我接触了一些流行的框架。毕竟老板说用什么就得用什么,有时你可以劝说他们改变初衷,但有时你只能顺从或放弃。即便因为这个原因放弃,也是不可能的。好在,硬着头皮用了一遍之后,我发现开发效率大大提高了。下面是我的一些感受。
PHP是最出色的网络开发语言
PHP是最好的网络开发语言,这是毋庸置疑的事实。当然,如果将网络这两个字去掉,这个说法就毫无意义了。许多人炒作Java、.Net和Python,但它们跟PHP相比要差得远。
PHP的优点包括:
简单易学。尽管这导致了PHP开发者群体的庞大和质量参差不齐,但我们不能因为阳光和空气的获取毫不费力就轻视它。这是人的问题,而不是开发语言的问题。
高灵活性,与HTML、CSS高度融合。PHP本来就是为网络开发而生,其他语言都是从桌面程序和控制台程序发展而来。
服务器配置简单。网络上有很多一键配置选项,简单易行。
对服务器要求低,与MySQL搭配良好,甚至一台办公电脑都能运行得很顺畅。相比之下,如果你用Java+Oracle,就需要专门购买一台服务器。你想用办公电脑作为服务器,除非少于一百人访问,否则会卡死。我曾接手过一个公司的OA项目,用PHP做出来,即使有成千上万人访问也毫无压力。
PHP的缺点包括:
缺乏并发和事务处理机制。对于超大型网站,比如新闻网站,采用生成HTML的方式还好,基本没有压力。但对于一些如OA系统(我没见过千万级访问的OA系统),以及复杂事务流程来说,效率并不高。因此像某宝的一些秒杀活动、12306订票和银行ATM取款机等都采用Java或Python,因为它们重视的不是浏览内容,而是事务处理,通常需要多台分布式服务器并发执行。
只支持网络开发,不方便制作.exe文件。不过这实际上也不算缺点,毕竟它本来就不是做这个的。就像你用大刀和长矛去厨房切菜,却抱怨不如菜刀好用一样。让一个程序员去炒菜,他说不如新东方学徒,你也别太苛求了。
语法不够严谨。变量不需要预先定义就能使用,这点我觉得挺方便的。此外,PHP有严格模式,启用后变量必须先声明才能使用,你可以选择是否使用。另外,提到这一点,我不太习惯Python没有大括号的写法。有人说这样更优雅,但我觉得如果要复制粘贴一段代码,单纯调整格式就要花费很大的精力,而且代码一长或者从别的机器复制代码,容易出错。
什么时候使用PHP
项目规模不大,判断方法就是看你需要几台服务器运行这个程序。如果需要几十台或几百台,那就是大项目了。PHP可以轻松应对不超过10台服务器的项目。
减轻PHP压力的中型项目方法
对于千万级的中型项目,可以采用以下方法来减轻压力:
将数据库放在单独的一台或几台机器上(主从模式、数据复制、数据同步是关键)。记住,把数据库放在几个地方要比将网站代码放在几个地方容易得多。
使用二级域名,将几个功能分别放在几台服务器上。你可以将会话和公共变量保存在数据库中,确保无缝登录整合。
原生开发与框架
原生开发的优点包括:
低学习成本
代码冗余少。本来一个几百KB大小的小项目,用ThinkPHP就需要10MB多。
执行效率高,毕竟框架会消耗很多资源。
高安全性能(如果你是专家)。框架有时存在漏洞,会让你的程序天然带有漏洞。
程序配置和开发灵活,不需要遵循框架的路由规则。
框架开发的优点包括:
高开发效率,代码量少(这里指的是你自己编写的代码)。
提供多种功能,调用比较简单。
高安全性能(如果你是新手)。毕竟,编写框架的人的水平比你高,他们考虑得比你更周到。
代码打包后较大,因为包含了框架的代码。尤其对外包项目来说,如果你收了对方三万块钱,却交付了300k的代码,对方可能会觉得不划算。而如果使用了框架,再加上一些图片,文件大小至少是30M。当然,你还可以更无耻一些,搞个几百M的代码。关于原生开发,你可能会问原生开发不会使用图片吗?但问题是,如果别人看到PHP文件不多,每个文件只有几十行代码,他们会觉得这个人很傻吗?
总的来说,对于业务逻辑不是很复杂且可以用框架完成的情况,还是使用框架更省事。如果你发现很多功能用框架无法很好地完成,那就使用原生开发,没有必要纠结太多。如果你是新手,如果无法判断何种方式更适合,可以加我微信(jsjlaoliu),将你的功能发送给我,我可以帮你判断何种框架更合适。
常见的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是一个简洁优雅的PHP Web开发框架,但遗憾的是,我个人不够优雅,无法感受到这一点。相反,我被那些繁琐的配置弄得一团糟。它的优点在于大量的第三方开源库,可以快速便捷地实现各种模块功能。它的安全机制非常完善,包括数据验证(约80种验证方式,涵盖了你能想到的大部分),以及提交数据时产生的随机_token验证,避免非法提交,防止跨站脚本攻击。它还继承了登录验证和权限验证,这一点确实非常方便。如果你感兴趣,可以研究一下。
4.4 Yii
Yii采用严格的面向对象编程(OOP),这是它的主要特点。但是遗憾的是,我个人不太喜欢这种严格性。Yii拥有大量组件,学习成本也较高。据说它适用于开发大型Web应用。
4.5 Yaf
Yaf,全称YetAnotherFramework,是用C语言编写的PHP框架,以PHP扩展形式提供。相比一般的PHP框架,它更快、更轻便,据说性能非常出色。但是对于我做的小项目来说,我无法感受到它的优势。这个框架学习起来比较困难,使用人数也不多,但几乎所有使用它的都是大公司。比如新浪好像就在使用它,百度以前也用过。如果你只是做小项目,可能没有必要去了解它。如果你想进入大厂工作,可以研究一下。
4.6 CakePHP
这个和ThinkPHP很类似,据说ThinkPHP开始时参考了它。既然如此,我们还是用ThinkPHP吧,毕竟它是国产的,大家容易理解,遇到问题也容易找人请教。
4.7 Zend
ZendFramework(简写ZF)是开源的,主要用于Web应用程序的开发和服务。ZF采用MVC(Model-View-Controller)架构模式来分离应用程序中的不同部分,方便程序的开发和维护。这个框架的包体积很大,功能很多,学习起来的成本也比较高。性能并不是很突出,国内使用也比较少,我没有太多研究过。
好了,本文就介绍到这里。PHP框架种类不下千种,我这里介绍的是目前比较主流的PHP框架。如果有遗漏的,欢迎大家留言补充。另外,国内也有不少自主开发的框架,但多数是个人开发的,所以我没有做过多介绍。从下一篇开始,我将带领部分初学者展开对ThinkPHP6的学习之旅。