快捷搜索:

Java上的PHP:对两者都好?

越来越多的迹象注解PHP与Java/JEE开拓社区的关系越来越亲昵,越来越显着。IBM和Caucho都为Java上的PHP架构进行了伟大年夜的投入。Sun、Oracle和BEA在以前的18个月中,也都发布了集成PHP或者与Zend建立伙伴关系。Jerry Cuomo(IBM的WebSphere CTO)和Scott Ferguson(Resin Java Application Server及近来的Quercus PHP引擎)与我们一路评论争论了PHP若何融入Java的天下。今朝IBM在Java/PHP混杂系统方面最直接的投入是Project Zero,一个开拓中的新的Web框架,支持Groovy和PHP脚本说话。当被问到为何IBM选择在Project Zero项目里支持PHP,Jerry有些话要说:

Jerry:三个词——敏捷性(Agility)、内容(Content)、练习(Educated)。是的,PHP是我们的ACE。

敏捷性(Agility)。J2EE利用是为了“永远的代价”而优化的……也便是说,写出来的法度榜样是盘算要不停运行下去。PHP脚本是为了“在周五之前投入运行”而优化的。也便是说,PHP让你快速简洁地编写代码,这对付许多应景而生的利用是相宜的。

内容(Content)。我们叫它“剪贴式编程”。网上有弗成胜数的PHP资本。你很少必要从头开始编写什么器械。搜索,剪切,粘贴,你就可以收工了……(这又涉及到敏捷性)。

练习(Educated)。PHP很轻易自学。编写PHP脚本对很多人来说都异常轻易,纵然是没有受过正规谋略机科学教导的人。例如,像内存治理和线程这种繁杂的器械,在你编写PHP脚本的时刻毫不会成为留意力的中间。而且就如我在上一点所说,大年夜多半时刻你都是在改动使用别人的代码。

Caucho采取的道路与IBM不合。Project Zero看起来似乎是一个Java/Groovy框架,只不过刚好也支持PHP说话。而Quercus,是能够与mod_php竞争的完备的PHP说话实现。它是一个令人印象深刻的实现。事实上全部PHP说冥器都是用Java编写的,是以不仅能够供给原生的Java/PHP集成,还有效使用了JVM的强大年夜能力来达到极高的效率和安然性。对付从技巧的角度看,Java若何令Quercus脱颖而出,Scott如是说:

Scott:Java平台的线程、缓存和池技巧是Quercus成功的关键。大年夜多半Quercus库的实现都只是对响应Java功能的包装。例如,数据库造访便是对JDBC的包装。由于Java平台已经供给了坚实的根基,Quercus不费吹灰之力就获得了那些强大年夜的能力。

而且反射、内存治理、JDK 1.5 Annotation和动态编译/类装载,这些都是Quercus所需的。虽然我们不能像C PHP一样应用智能指针来编程,我们却可以得到干净的OO设计,并依附Java去处置惩罚内存的问题。

当然还有运行阐发(profiling)。Quercus自动从JVM的CPU和堆运行阐发中得益。由于编译后的Quercus函数实际上便是Java措施,我们可以准确地从运行阐发中看出哪一块代码运行得太慢或者耗损了太多内存。

快速、轻量并且广泛吸收的Web层框架不停是Java平台难以完成的目标,我们向Jerry和Scott两人都提出了同一个问题:他们投入于PHP运行时的领域,是否因为感到到Java社区已经放弃了应用基于Java的框架来完成高效Web层开拓,转而在这一层应用动态脚本说话。他们都觉得我的提问夸大年夜了弃用Java的趋势,他们如斯描述应用Java和应用PHP之间的平衡:

Jerry:“转移”和“放弃”的说法有点过了。我感觉应该说我们正“把Java提升到更高档的行政职位上”。Java自己赢得了这样的位置。这并不是一个非黑即白的问题。除了Java今朝的角色,我信托它可以成为这些动态脚本说话的“系统编程”情况。就像Java与C/C++的关系。现在Java(以及JVM)必要生长(和退缩)来支持各类DSL。例如,当今的Java是为经久运行的利用和进程而优化的。DSL则是夭折的,常常交往来交往去。

Scott:我们不建议完全扬弃Java。Web利用框架底下的根基举措措施如Spring、JPA/Hibernate,对象如Coherence,测试框架如JUnit,Java在这些方面是无与伦比的,远赛过脚本天下中任何器械。除此之外,利用级缓存、办事、事故和线程这些不为人所见的器械用Java会好得多。假如你看看像Mediawiki(维基百科所用的法度榜样)这样的PHP利用,可以显着地看出底层代码假如用Java编写会好很多。

Quercus/PHP的成功之处是在它的体现层,脚本可以满意许多分外要求机动性的环境。Java体现框架如JSF、JSP/JSTL、Struts、Velocity,没有一个能达到完备的脚本说话的机动性和库能力。许多框架,如JSP/JSTL,都是部分的说话实现。为什么不干脆用一个完备的脚本说话,再加上一个宏大年夜的库呢?已经有伟大年夜数量的网站证清楚明了这种脚本说话的成功。

是以我们觉得结合Java(用在后台、模型和底层办事),把PHP/Quercus用于体现层以及任何必要脚本的地方(如取代BPEL),会是最佳的选择。

我们还问到若何对照PHP和其他说话,如Ruby和Groovy。我们请Scott奉告我们为什么他写了一个PHP而不是Ruby说冥器?

您可能还会对下面的文章感兴趣: