php和java的一些比较

现在市场上的电子商务软件基本上可归结为两大阵营,即PHP阵营和Java阵营。但对接触电子商务不久的用户来说,看到的往往只是它们的表相,只是明显的价格差异,却很难看出它们之间的实际差异。其实,PHP+ MySQL高效的开发、品质优良的特性,已经让风靡大学校园的Java变的越来越难堪。而作为PHP+ MySQL为什么在历史的进程中,后来居上,独领风骚呢?为什么基于Java架构的的电子商务除了高额的开发成本,而变的前途暗淡呢?首先得明白PHP和Java之间的差异才行。
1、 出身
Java本来的设计初衷是为了家用消费电子产品开发一个分布式代码系统。
PHP就是为了互联网的应用而生的。
  2、系统的技术架构比较
分层是将系统进行有效组织的方式,分而治之的思想是计算机领域中非常重要的思想。在好的分层思想引导下,便能实现“高内聚、低耦合”,也能将具体的问题割 裂开来,易于控制、易于延展,更易于分配资源。从PHP5版本之后,PHP对于系统架构方面也有了质的飞跃。ShopNC 采用PHP语言开发,可以完美的实现多层架构分布。运用MVC的设计模式,可使电子商务软件具有更加高效、合理的系统架构。使得系统在可拓展性、需求应变性上与Java编写的电子商务软件系统的毫不逊色。
Gutmans 在前年发表过一篇文章,其中也阐述了多核环境中多线程(JVM)与多进程(LAMP)的比较。其中就提到了多核系统非常适合LAMP架构的多进程方式。随着芯片业现在把主要精力都放在了多核而不是超线程技术上,JVM这样的多线程环境的优点在今天的硬件上将无法充分发挥。而多进程方式将提供更多稳定性和可靠性。
这一回合,PHP旗开得胜。
  3、数据库访问比较
  PHP可编译成具有与许多数据库相连接的函数。 将自己编写外围的函数去间接存取数据库。通过这样的途径当更换使用的数据库时,可以轻松地修改编码以适应这样的变化。同时现在的PHP提供了数据库统一接 口PDO,对Oracle,MySQL,SQL2000等不同数据库的访问都可以通过桥来完成,而不用考虑数据库接口方面问题。同时为了更好支持 MYSQL数据库,PHP还推出了MySQLi的数据库连接,更加高效,安全。而Java是通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库 驱动访问数据库。而没有特别的针对性优化。如果同样是将开发的web应用从MYSQL数据数转到ORACLE数据,PHP通过PDO的接口,几乎不用做程序方 面的修改(ShopNC中已经通过自主研发的封装数据库层,已经可以很好的完成对多种数据库的支持,甚至无需通过PDO)。而Java开发的需要一定的的 更改才能实现。数据库访问方式的差异,奠定了PHP开发出的电子商务软件和Java开发出来的电子商务软件是2个时代的差距,Java是传统的一 代,PHP却是新科技发展的成果,PHP不仅能够包容万物而且速度上稳步提升,效率比Java强悍的多。这一回合,Java稍逊风骚。
  4、安全性对比
  开源是安全的最大优势,LIUNX 就是一个非常成功的佐证。PHP的开发程序在别人拿到代码后,可以很容易的进行修改。而Java开发的程序由于无法看到完整的源代码,只能看到一些编译好的类文件.class,所以底层架构的诸多隐患都无法提前预知,一旦发生灾难性的错误,后果必将及其严重。而PHP如果想要加密代码,也可以使用Zend 公司的权威产品zend guard 进行加密,以保证产品的知识产权。如果非要将PHP和Java在安全性上做个比较的话,只能说伯仲之间,如果出差距,也是由开发程序员的水平来决定的。这一回合,两者依旧平分秋色。
  5、互联网应用方向上的前瞻性和拓展性
从整体来说,PHP适用于互联网应用,而Java语言设计之初,并不是以WEB为中心,而是以通用服务为中心。PHP能够将互联网的应用发挥到淋漓尽致,Java在通过标准的或者非标准的一些框架在迎合WEB应用的需求。
为什么说PHP适合互联网的应用呢?
  首先,PHP对于大型系统负载方面,可以采用分布式部署。将数据库、应用逻辑层和表示逻辑层彼此分开,并将同层的根据流量分开。PHP在这个方面做的非常优异。
  其次,PHP提供的数据库接口众多且还有统一的接口,要将多个不同的数据库数据统一,不需要花费很大的力气。而Java也可以通过Class和EJB 获得规模支持,通过EJB/CORBA以及众多厂商的ApplicationServer获得结构支持。而与即有老的Java或者.NET 应用程序通讯方面,PHP可以通过即有的API接口进行通讯。至于数据的通讯所使用的数据无非也都是XML,JSON等。
如果将PHP比作互联网中的最佳表现奖,具备独挡一方的能力。那么Java应该获得的是最没有创新奖,就如同欧洲中世纪武士,唯有沉重的框架,笨重的效率。
难怪连当年的SUN也在其J2EE方案上支持了JRuby及Jython。而IBM Websphere意识到J2EE在WEB方面的不适应而开启了Project Zero项目。 结果呢? Project Zero 的首席架构师也是很无奈的公开承认“Java现在可以认为只是一种系统语言而不适合构建Web应用”。
其实Java已经在企业级E化和关键业务应用中根深叶茂,但是在Web应用上,Java语言市场份额急剧下降,颓势尽显。
所以这一回合,Java输的哑口无言。
6、产品化程度
    用Java做开发,几乎没有一个程序员会从底层写起,因为都是即有封装的类。这其实是导致Java很难产品化的一个重要原因。因为几乎所有的程序员可以做 的都是比较浅层的应用开发。而就Java的类而言,放到互联网上,那只有一个沉重可以形容。而唯一让Java一直宣称的跨平台的优越性,其实那也是对于初 学程序者的一种宣传,对于资深程序员那就是一个笑话,一条鸡肋。经历了很多大项目的资深开发者都知道,开发伊始,程序需要跑在什么平台上,都是确定的了。 越是大型项目,越是确定的明确,而且轻易不会考虑平台的移植。即便需要在其他平台架设新服务,也是在新平台上进行增项的开发,与即有产品之间也可以通过 Webservice解决。而数据库是无所谓的。我想不会有人用ACCESS来做大型商业程序的开发吧!
随着大多数业务应用程序包括CRM、ERP、报表、文档管理等等也都转向了Web,放眼望去,PHP的产品,琳琅满目,在互联网应用方面,可以负责的说, 涵盖率在99%以上。虽然众多产品的质量也是参差不齐,但是每个方向及领域都是有那么一些代表产品的。能举出范例的有Wordpress, Drupal, mediaWiki, osCommerce, SugarCRM,Discuz, QeePHP,ShopNC等等。
产品化程度是直接佐证了工业化程度的一个重要数据。不能工业化的工具,其实其本身是有着非常大的悲哀的。
这一回合,Java输的体无完肤。
  7、开发及后续维护成本比较
  既然PHP在互联网应用诸多方面都强于Java,那么Java开发出的电子商务产品何以与PHP产品竞争呢?这在于Java阵营普遍走的是政府路线, 而PHP阵营走的是全民路线。Java在互联网方面靠的是大学老师的言传身教,才得以在互联网世界狺狺狂啸,而PHP是靠得是自身品质而得民心,所以才一 路赞歌。
软件价格的高低很大程度上和自身成本和功能相挂钩。PHP的入门门槛较低,但是任何方面成为高手,都是万里挑一。绝大多数学过c的程序员都很容易转型为PHP程序员,这使得PHP程序员如同国球一样普及,同样更是高手如云,高质量的PHP软件产品也层出不穷。
服务器成本方面,PHP最经典的组合PHP+ MySQL + Apache,Java也是经常与MySQL + Tomcat、JBoss等软件配合。所有软件都是开源免费的,所以服务器端的投入都并不高。
而Java程序员的学习成 本却是PHP成本的几倍,原因也很晴朗,本身Java就不是专门给WEB开发用的。所以,Java开发电子商务的成本要远远高于PHP开发出来的同类软件 产品。但也正由于Java开发的成本较高,所以往往也是做一个同样的产品,达到同样的效果,Java需要付出比PHP开发多出N倍的时间及经济成本。直接的造成了巨大的时间及成本浪费。
最后一回合,Java在WEB之战中,输的干干净净。
通过以上数据也可以让读者非常清楚的意识到,采购了Java类的电子商务商品,你将来后续的维护期带来多么昂贵的经济成本,及付出多少宝贵的时间。商机是稍纵即逝的,如果商业上的运作永远需要在等待漫长的技术实现后才可以施展,那恐怕真的是黄花菜都凉了。
不怕不识货,就怕货比货。PHP开发出来的产品应用普及,口碑良好,但是Java开发出来的产品,很难形成规模,直接导致产品化的少,项目类型的多。正因 为PHP开发的产品整体性能经历了万千使用者的检验与完善。Java与之相比则相去甚远,所以Java只有走政府路线,以价格落差来平衡采购方的心态,也 就不足为奇了。
总结所有一切,PHP才是的电子商务软件发展的最有力推动者,也将必然成为大势所趋,是不可逆转的,是不可被质疑的。
作为程序员,无论PHP还是Java。高度这个问题上,其实对于我们而言都一样的。在这个高度上的战争其实是各大厂商之间的事情,和我们无关。但是例如WEB方面。我还是要为自己的阵营摇旗呐喊!

php开发和java开发有什么不同

 
http://zhidao.baidu.com/question/451520611.html?qbl=relate_question_1比较PHP和JSP这两个Web开发技术,在目前的情况是其实是比较PHP和Java的Web开发。以下是我就几个主要方面进行的比较:一、 语言比较PHP是解释执行的服务器脚本语言,首先php有简单容易上手的特点。语法和c语言比较象,所以学过c语言的程序员可以很快的熟悉php的开发。而java需要先学好java的语法和熟悉一些核心的类库,懂得面向对象的程序设计方法。所以java不如php好学。Java首先要编译成字节码.class文件,然后在java虚拟机上解释执行。Java的Web开发首先最容易想到的就是JSP(现在已经到JSP2.0),原来的java的Web开发都是用servlet来实现的,用servlet来开发需要程序员在java的源文件中嵌入大量的html代码。所以后来就出现了JSP,JSP可以方便的嵌入到html文件当中,其实jsp文件在服务器上执行的时候首先会被应用服务器转换成servlet,然后再编译执行。Jsp可以通过servlet和JavaBean的支持产生强大的功能。JavaBean 是一种可复用的、跨平台的软件组件。使用javabean可以方便的实现java代码和html的分离,能够增强系统的功能和软件的复用性。Java的Web开发属于SUN公司定义的J2EE其中的规范。而且在J2EE中包括了java的Web开发的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特别适合于做大型的企业级的应用。二、 数据库访问比较Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。例如:用Java开发的Web应用从MySQL数据库转到Oracle数据库只需要做很少的修改。而PHP则需要做大量的修改工作。三、 系统设计架构比较采用Java的Web开发技术,需要使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。所以用Java进行开发前期需要做大量的系统分析和设计的工作。四、 跨平台性Java和PHP都有很好的跨平台的特性。几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的操作系统上。五、 开发成本比较PHP最经典的组合就是:PHP + MySQL + Apache。非常适合开发中小型的Web应用,开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。Java的Web应用服务器有免费Tomcat、JBoss等,如果需要更好的商业化的服务有:Web Sphere和 Web logic。六、 分布式多层架构比较PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就比较强大,可以实现多层的网络架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用java的Web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。下面简要的说一下Struts,它实质上是在JSP Model2的基础上实现的一个MVC(Model、View、Controler)框架。JSP Model2体系结构是一种联合使用JSP 与Servlet 来提供动态内容的方法。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由Servlet实现的,视图由一组JSP文件组成。采用Struts可以明确角色的定义和开发者与网页设计者的分工。而且项目越复杂,其优势越明显。七、 源代码安全PHP开发的程序的源代码都是公开的,他人拿到php开发的程序后都可以进行修改。Java开发的程序,最后用户拿到的是只是一些编译好的class类,无法看到完整的源代码,安全性高。八、性能比较有人做过试验,对这两种种语言分别做回圈性能测试及存取Oracle数据库测试。在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒。数据库测试中,二者分别对 Oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13秒,PHP 需要 69 秒。 综上所述,我个人认为,PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于开发大型的应用系统,应用的前景比较广阔,系统易维护、可复用性较好。还有,同样功能的系统用Java开发的系统要比PHP开发的系统的价格要高。
  • php和java在开源社区的活跃度严重超过了其他的语言,使用人数也都是相当之多;活跃的开发工程师们能够给我帮助,且这俩都能很好的跨平台,不用花费大量的人力物力去维护
  • 我也做过一个物联网的网关网站,比较复杂,当时采用的是jsp+java,复杂程度可想而知,单单说开发过程,网站部分繁琐,每次想查看结果运行网站的时 候还需要重新打包部署一下,严重影响了哦的开发效率,每天的时间都是在等待(因为网站比较复杂,打包部署需要浪费一些时间)。相对来说呢,php就没有 了,php灵活,好学,上手快,容易修改,容易发布,关键是热部署,这个真让哦眼睛大亮。当然看待任何事物都需要两种眼光,php也会有缺点,比如没有太 好的开发IDE,所以拼写错误很正常,且php的sql注入危险较大点,执行效率不高,安全性不如java。
  • 还有一些理由,来自知乎的米米们给的建议:
  • Java的优点则是稳定可靠、运行效率高(尤其是JIT的出现之后差距更大了)、不容易犯错(强类型、预编译、必须拦截异常等等),缺点是开发和发布的效率相对较低。尽管优秀的工程师能在一定程度上改变以上的问题,但通常而言,哪能到处都是高手多如狗的梦之队?
  • 从MVC的层次结构上说,在一般网站项目的开发周期中,需求变更最频繁、调整最多的是View,其次是Controller,最后是Model。这非常好理解,没事干谁天天改数据结构?每次版本升级控制结构都要改的啦,或多或少而已。
  • 再次是两者之间的通信,目前RPC技术已经足够成熟,无论是Web Service/Hessian/RESTful API都能够让开发人员专注在功能开发上,而不需要过多的考虑异构平台的差异和通讯的细节。这也就意味着在大公司里同时应用两种语言的方案并不会引入过多 的复杂度和工作量。当然,文档量的下限倒是因此被拔高了不少,但事实上大部分团队对此其实都是喜闻乐见的:别每天说文档重要但没空了,你不写其他同事怎么 配合?
  • 靠近用户的前端,使用PHP能够更快的完成前端频繁而琐碎的更新,自如的应对各种需求的变化。页面的结构调整、用户输入内容的基本验证、仅只和用户交互有 关的简单逻辑等都很适合使用PHP来开发,甚至可以通过类似Smarty等模板技术将其页面的变动迁移到前端团队。而基本的业务逻辑和数据的更新采用 Java开发,可以有效的提高复用度、提升性能和吞吐能力、规避安全问题等。而开发效率稍有降低换来的是可维护性的提升,发布速度慢就更不是问题了,因为 通常对于基础业务逻辑的调整往往都是整体修改,并层层测试确认才能发布的。

所以,大型网站前端采用PHP后端采用Java,既好招人又好维护、系统稳定还性能高、连安全性都大大增加。代码复用、文档完备度居然也都改善了。让你在以上这些好处触手可及时,对架构师知识谱系在广度上要求更高一些这事根本就不是个问题。

为什么不是仅用PHP或是仅用Java?

    • 其实也有很多公司为了保证团队组织不至于过度复杂,会更倾向于采用单一语言,尤其是中小公司。
      单一方案其实一样可以做良好的隔离,PHP同样可以提供Service,而性能问题其实很多时候是算法和架构的问题而不是语言差异的问题。如Velocity或JSTL等也是很优秀的隔离方案。
      但这些方案在高压力下会暴露出很多问题而体现双语言的优势,这些在上面其实都提到,详细说明一些很难得到改变的点:
      1. PHP由于其动态脚本语言的特性,包括类、函数、常量在内都需要在每次请求周期中重复执行后才能建立运行环境;为了保证解析速度而牺牲编译质量;应用了 FastCGI但仅仅只是复用进程处理请求减少fork成本而不是像其他语言,初始化完毕后通过FastCGI的接口获得数据并以对应接口返回数据等几个 原因,基本上已经不可能在性能上追回当初更烂现在开着JIT牌跑车的Java了。
      2. 在PHP里是如此的容易犯错而难以发现,即使你用实质上出自官方的Zend Studio,也无法改变一个事实:要保证你的程序高质量无大错,得要有充足的经验、足够的严谨、以及——负责任的QA。淘宝的黄裳就曾经拿IDE这事开 过玩笑。而玩笑背后的那个原因“缺乏中间件”最近几年有不少的改善,主要是不少中间件的支持变得更广泛了从而让PHP得益,但发展的根源其实还是在C和 Java社区。性能和易犯错则是语言特性造成的技术难点,也是用来换取灵活、快捷的必要代价,很难去指望有根本的改善。
      3. Java的世界里也有JSTL、Velocity和Freemaker等,但和PHP灵活而强大的动态能力、丰富的函数和类库、轻松的学习成本、多到令人 发指的文档相比,简直就是渣,就是渣啊!JSTL改完了要重启Context啊有木有?Velocity不关缓存也要重启啊有木有?Velocity开缓 存性能低下啊有木有?即使这些都不管,调整下某个数据校验规则要改Action也要重启有木有?
时间: 2024-09-29 04:46:12

php和java的一些比较的相关文章

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

Java TM 已被阻止,因为它已过时需要更新的解决方法

公司的堡垒机需要通过浏览器登陆,且该堡垒机的网站需要Java的支持,最近通过浏览器登陆之后总是提示"java TM 已被阻止,因为它已过时需要更新的解决方法"导致登陆之后不能操作, 但是操作系统中确实已经安装了比较新的JDK,安装的JDK版本是jdk-7u67-windows-i586,因为太烦人,所以决定搞清楚报错的原因,一劳永逸,彻底解决这个问题 准备工作:安装JDK,安装版本jdk-7u67-windows-i586.exe,因为机器的Eclipse还依赖64位的JDK,所以另安

Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? Java new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 1 2 3 4 5 6 7 new Thread(new

由@NotNull 注解引出的关于Java空指针的控制(转)

Java 小技巧和在java应用避免NullPonintException的最佳方法 在java应用程序中,一个NullPonintException(空指针异常)是最好解决(问题)的方法.同时,空指针也是写健壮的顺畅运行的代码的关键.“预防好过治疗”这句话也同样适用于令人不爽的NullPonintException.通过应用防御性的编码技术和在遵守多个部分之间的约定,你可以再很大程度上避免NullPointException.下面的这些java小技巧可以最小化像!=null这种检查的代码.作为

Java注解(2)-注解处理器(运行时|RetentionPolicy.RUNTIME)

如果没有用来读取注解的工具,那注解将基本没有任何作用,它也不会比注释更有用.读取注解的工具叫作注解处理器.Java提供了两种方式来处理注解:第一种是利用运行时反射机制:另一种是使用Java提供的API来处理编译期的注解. 反射机制方式的注解处理器 仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解.下面结合例子来说明这种方式的处理方法. Java中的反射API(如java.lang.Class.java.lang.reflect.Field等)都实现了接

jvm系列(一):java类的加载机制

java类的加载机制 原文:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个

Java注解(1)-注解基础

注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式.注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样.那么,注解到底可以做什么呢? 1.注解的作用. 提供用来完整地描述程序所需要的信息,如编译期校验程序信息. 生成描述符文件,或生成新类的定义. 减轻编写"样板"代码(配置文件)的负担,可以使用注解自动生成. 更加干净易读的代码. 编译期类型检查. 2.Java提供的注解 Java5内置了一些原生的注

异常笔记--java编程思想

开一个新的系列,主要记一些琐碎的重要的知识点,把书读薄才是目的...特点: 代码少,概念多... 1. 基本概念 异常是在当前环境下无法获得必要的信息来解决这个问题,所以就需要从当前环境跳出,就是抛出异常.抛出异常后发生的几件事: 1.在堆上创建异常对象. 2.当前的执行路径中止                                          3. 当前环境抛出异常对象的引用.                                         4. 异常处理机制接

Java自学序言

Java自学序言 亲爱的自己和各位读者朋友: 您们好! 这是作者本人自学Java编程开发的一系列文章,不具有一定的权威性,也算是自己一个人的学习笔记和总结,希望自己通过博客的形式将我自己的学习效率得到提高.如自学的稳重存在不足或错误的地方希望广大的博客朋友们多多指教.本人在此不胜感激! 学习Java是一件很痛苦的事儿,我自己要想不断的去挑战一下自己,把自己大学所学的Java知识能够巩固起来.不断的去改正自己开发中的不足之处.如何来学习Java?如何来更好的掌握Java开发语言?这些都是我们要不断

接口测试(java+testng+ant+jenkins)第五篇 java二

1.数据代码分离,方便维护. 一般做法是将数据保存在excel,通过程序读取. 2.读取excel数据. 在D盘新建excel,A列放url,B列放参数. 新建class redExcel package com.lx; import java.io.File; import java.io.IOException; import jxl.*; import jxl.read.biff.BiffException; public class redExcel{ public static voi