提到PHP,“PHP是世界上最好的语言”这个话题是绕不过去的,而且如果想和一个攻城狮打开无话可聊的尴尬局面,“【XXX】是世界上最好的语言”(【XXX】是这位攻城狮所主要使用的语言)也是最经典的话题,他/她估计可以和你聊一个下午。(但是也许你只是想拿这个话题做一个开场)
言归正传,Java、PHP是现今Web世界中最流行的两种服务端开发语言,在技术选型阶段也经常拿来比较,到底选哪个比较好?虽然已经是一个老生常谈的话题了,但却是经久不息,总是有各种新的立场与观点会冒出来,这里也不免俗套的想来比一比、聊一聊。
PHP:语法不严谨、弱类型;解释型;非完全面向对象;单线程(默认。可以通过扩展来支持多线程);稳定性一般、安全性一般;跨平台;上手容易、学习升本低;开发速度较快、开发效率较高;部署、发布较简单;
Java:语法严谨、强类型;编译型+解释型;完全面向对象;天生多线程;跨平台;稳定性较强、安全性较高;上手有一定的困难度、有一定的学习成本和学习周期;开发速度一般、开发效率一般;部署、发布都有一定的复杂度;
所以到底用PHP还是Java?
无非是考虑以下几点:
1:人力成本:两者差别不大。
2:产品、项目需求:
在基于B/S架构的Web应用中,项目需求复杂程度跨度比较大,从企业展示网站、个人博客搭建,到电商平台、物联网平台、CRM系统,再到金融平台、银行系统,项目需求复杂程度以指数级递增。再加上Web应用运营阶段时版本更迭对项目需求的影响,Web应用在开发之初就需要建立起一个完整的系统设计。与国家5年计划类似,系统设计在最初版本一定有着一定的空间与时间假定,例如一个最初设计为企业展示网站的Web应用,在一定时间与一定发展程度的影响下也绝不会跳出企业展示需求而变成银行系统。这样一个系统设计的假定与技术选型息息相关,而PHP和Java在Web领域的也有着不同应用场景。简单的系统设计PHP完全可以胜任, 而复杂的系统设计意味着后端代码需要模块化,要高内聚/低耦合以及代码重用,无疑面向对象的Java语言更适合这种复杂的场景。
而且对于大型系统,系统架构是关键之关键,在系统架构这方面,Java毫无疑问完胜,Java拥有多种架构选择,常见的SSH框架即Struts+Spring+Hibernate、SSM即Spring MVC+Spring+Mybatis、SM即Spring boot+Mybatis、包括现在流行的Spring Cloud微服务框架都可以作为web应用的框架选型,这些框架能够很好的将后端模块进行分离,根据具体需求的不同选取不同的MVC层、业务层、持久层框架进行开发。有人说PHP也可以做到,说PHP有很多的框架也可以做到分层架构,ThinkPHP不就是国人开发的PHP MVC框架么?PHP有框架这点毋庸置疑,但是PHP从语言特性上来讲并不适合做框架,框架和面向对象编程思想有很强的联系,而PHP语言特性上对面向对象并不友好,这也就导致了PHP在框架这条路上其天花板与Java相去甚远。在这里有些PHPer毫无疑问会义愤填膺,但事实如此,PHP的语言特性偏向与面向过程,其旨在开发特定的业务逻辑,这也是PHP适合Web开发的原因。又有人会说,PHP5.0之后也支持面向对象,但事实上PHP也是不得已而为之。
3:运营成本:
部署方面:从基础设施的搭建、版本的发布而言,非常明显PHP确实要比Java性价比高很多。
维护升级方面:Java由于其语言和架构方面的优势,系统易维护、可复用性较好。Java的理念是“一次编写,到处运行”,Java的框架利于大型的协同编程开发,系统易维护、可复用性较好、稳定性较好。
综上所述:
对于一个普通的Web应用而言,如企业展示网站、个人博客搭建、微商平台、小型ERP、CRM系统,技术角度PHP完全足够,价格角度PHP也便宜于Java,开发速度PHP略优于Java。
对于一个复杂的Web应用而言,面向对象的Java将会是不二的选择。尤其对于物联网应用(由于PHP语言的特性,基本不支持消息队列,天生和物联网应用绝缘了)、电商平台(电商平台开发快不是最核心的目标,安全、稳定、已维护、已扩展升级才是核心,因此阿里巴巴、京东都走过电商平台从PHP平台切到J2EE平台的过程)。
写在最后:
以上,PHP、Java的优劣势已经非常清晰了,在大型系统中Java也是不二选择。但是虽然是这么说,但是Java应用哦开发速度、开发效率一般总归是绕不过去的砍,而且是被PHPer暴击的点。那是不是Java在开发速度、开发效率上就一无是处呢,其实Java在开发速度、开发效率上的努力一直在路上。
从最初的最重的EJB,到轻量级的Spring,再到现在快到飞的Spring Boot,基本上每一次都是Java在开发速度、开发效率上大提速。可以说,有了Spring Boot的驱动,目前的Java开发速度、开发效率已经无限逼近于PHP了,再加上Java这么多的优势,Java真是不二的选择了。
去年服务端进行了从PHP+Java平台到纯Java平台的改造,就用到了Spring Boot驱动的SSM框架,下图是大体涉及到的技术栈:
(服务端在效率和标准化上的追求是否到此结束了呢?Microservice Architecture?下回我们再来聊聊Microservice Architecture,和我们今年落地Microservice Architecture的规划。)