`
jeffrey0411
  • 浏览: 54188 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)Java上的PHP,两者共赢?

阅读更多
   Jerry Cuomo(IBM的WebSphere CTO)和Scott Ferguson(Resin Java Application Server及最近的Quercus PHP引擎)与我们一起讨论了PHP如何融入Java的世界。目前IBM在Java/PHP混合系统方面最直接的投入是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解释器?

    Scott:我们希望选择一门已经在Web开发社区里证明了自身的语言,而PHP是占统治地位的语言。Ruby目前仍然是一门实验性的语言。Ruby语言虽然有很多令人喜爱之处,但也有一些问题。Ruby使用了一些高级语言结构如闭包和 Continuation,从这个方面来说很像Scheme。我个人很喜欢这些特性,但我的经历告诉我很多程序员都会被这些东西吓倒,因此会损害接受程度。PHP就像BASIC,任何人都可以学会。我会捧Ruby的场,我希望它成功,但当我们必须选择如何分配有限的时间,我们不得不先让Ruby等等看。

我们问Jerry是否认为PHP会继续成长,特别是在面临Ruby on Rails的竞争之下。我们还询问了PHP5中引入的面向对象是否让PHP更适合Project Zero这样的框架。最后,由于Project Zero同时支持Groovy和PHP,我们问Jerry一个新接触Project Zero并且不懂Groovy也不懂PHP的开发者,应该选择哪种语言:

    Jerry:PHP是和Ruby或者Groovy不一样的动态脚本语言……这话大概没错。不过,要想让世界上最受欢迎的应用(想想看Wordpress、PHPBB……)都用这些语言编写,它们还有很长的路要走。只要PHP应用还在发挥作用,就会有新的开发者学习PHP。考虑到大学生中流行的大多数工具都是用PHP写的,将会继续出现新一代的PHP程序员。

    虽然如此,PHP是否会继续成长还不清楚……它已经很庞大了,而且还存在很多竞争者,它们的语法更加清晰更加简洁。到时候再看。

    不过,(PHP语言有或没有OO特性)这并不是PHP被包括进Project Zero的原因。包括它是因为ACE。……如果你是一名Java程序员,应该从Groovy开始。Java程序员已经期盼了很久Project Zero所提供的那种敏捷特征。我们希望这对你“百利而无一害”。你既可以接着用Java,又可以做动态脚本编程。然而,如果你没有深厚的Java背景,或者你打算利用网上已经存在的资源——PHP是创造敏捷应用的好手段。

查看英文原文:http://www.infoq.com/news/2007/10/php-java-stack
分享到:
评论

相关推荐

    3.3 绿色商业模式创新:绿色时代如何共赢?.pptx

    绿色商业模式创新不仅是企业应对环境挑战的手段,也是提升核心竞争力,实现共赢的途径。它涉及产品和服务的设计、生产、销售以及废弃物处理等多个环节,鼓励企业从源头减少污染,通过循环利用和资源效率提升,实现...

    3.3 绿色商业模式创新:绿色时代如何共赢?.pdf

    绿色商业模式创新是当前全球可持续发展趋势下企业寻求共赢的重要策略。这一模式强调在创造经济价值的同时,兼顾环境和社会效益,以确保企业的长期生存和发展。中南财经政法大学的栗洋教授和彼得・德鲁克的观点表明,...

    精品课件(2021-2022)木门厂家与经销商之间如何实现互利共赢?.pptx

    综上所述,木门厂家与经销商之间的互利共赢需要通过提升品牌价值、有效终端管理、科学的利润分配和持续的经销商培训来实现。这些策略不仅有助于厂家扩大市场份额,也能促进经销商的长期发展,最终实现双方的共同繁荣...

    【课程思政案例】网络综合应用——PHP开篇--合作共赢.pdf

    例如,通过团队合作,让学生体会到在项目开发中,沟通和协作的重要性,以及如何在相互尊重的基础上寻找最佳解决方案。同时,还教授学生如何制定双赢协议,明确合作双方的期望和目标,以及如何合理分配资源和评估合作...

    海尔共赢增值表研究:共赢增值表-物联网时代的财务工具精品报告2020.pdf

    标题:“海尔共赢增值表研究:共赢增值表-物联网时代的财务工具精品报告2020.pdf” 1. 物联网时代的财务工具: 物联网技术的迅猛发展催生了新型的财务工具,这些工具能够适应物联网时代企业的运营模式和财务管理...

    【课程思政案例】网络综合应用——PHP开篇--合作共赢.docx

    本次【网络综合应用——PHP开篇】课程,通过课程思政的理念,将技术教育与价值观教育相结合,旨在培养出既具备专业技术能力又懂得合作共赢职业精神的新型人才。 开篇阶段,教师首先对PHP编程语言及其作为开源项目的...

    89 数字化转型数字转型正当时,协力共赢向未来.docx

    在2020年的SAP FKOM大会上,埃森哲大中华区企业技术创新事业部总裁贾缙强调,将继续携手SAP,以全球视野和专业服务推动中国企业完成数字化转型,实现下一个十年的蜕变。埃森哲的研究表明,数字技术和商业的高度融合...

    最新源码ThinkPHP共赢天下平台理财源码

    【运营版】最新源码ThinkPHP共赢天下平台理财源码 自适应PC WAP 支持正版,打击盗版,同步更新,售后服务有保障。 本店商品属于虚拟商品,具有可复制性,所以一旦发货,没有质量问题不接受退款 素质低下,贪小...

    基于Java技术的跑腿项目设计源码,助力合作共赢!

    这款基于Java技术的跑腿项目设计源码,包含503个文件,涵盖447个Java源文件、24个XML配置文件、10个YAML配置文件、8个IML配置文件、5个factories配置文件、3个txt文件、2个md文件、2个properties文件、1个gitignore...

    Javashop是基于 Java技术构建的开源网店系统

    同时 Javashop推出 “ 第三方开发者合作共赢计划 ”,依托计时软件有效计算开发费用,期望在实现双赢的基础上走出我们国人自己开源模式 ,详见 :Javashop第三方开发者合作共赢计划Javashop v3.0 升级日志:一、机制...

    PHP悟空CRM PHP版 v11.0

    2019年,悟空CRM会继续秉承“拥抱开放、合作共赢、创造价值”的理念,在开源的道路上继续砥砺前行,和更多的社区开发者一起为国内外开源做出积极贡献。 主要技术栈 后端框架:ThinkPHP 5.0.24 前端MVVM框架:Vue....

    三问数字化转型——什么是数字化转什么塑什么型.pdf

    总结来说,数字化转型是企业在新时代背景下,通过整合、优化和创新,利用新技术实现业务流程的全面升级,以提升效率、创造新业务模式,并通过数据驱动的战略决策,实现企业内外部的高效连接和共赢发展。在这个过程中...

    合作共赢蓝红经典商务工作总结通用ppt模板.rar

    标题中的“合作共赢蓝红经典商务工作总结通用ppt模板....综上所述,这个“合作共赢蓝红经典商务工作总结通用ppt模板”是一个实用且设计精良的工具,可以帮助商务人士高效地呈现他们的思想和成果,促进商务交流与合作。

    关于Java程序设计“课程思政”元素提炼的研究与探索.pdf

    在 Java 程序设计中,教师要注重提炼团结协作这一“课程思政”的元素,树立学生合作共赢的意识。想要推动一个行业健康长久的发展,绝对不能依靠一个人的力量去完成,通过团结协作才能实现合作共赢。 三、大国战略,...

    共赢美容美发美业管理软件.zip

    共赢美容美发美业管理软件是一款专为美容、美发及美业领域设计的专业管理工具,基于Java技术开发,旨在提升店铺的运营效率和服务质量。Java作为一种广泛应用的编程语言,以其跨平台性、稳定性和安全性著称,使得该...

    优质资料(2021-2022年收藏)事业共创、业绩共赢、成果共享的新模式.docx

    两者在价值链中的互补作用,保证了付出与回报的平衡,确保企业在市场竞争中保持活力和竞争力。 【成果共享】是共创和共赢的最终目标,是维持合作关系持续稳定的关键。资源共享不仅限于行业内的优势和资源,还包括在...

    ThinkPHP共赢天下互助平台理财源码 自适应PC+WAP

    "ThinkPHP共赢天下互助平台理财源码 自适应PC+WAP" 是一个基于ThinkPHP框架开发的网络理财应用源代码,旨在构建一个能够同时支持桌面端(PC)和移动端(WAP)的互助金融平台。"共赢天下"可能是这个平台的品牌或者...

    Javashop v3.0 beta2.rar

    同时 Javashop推出 “ 第三方开发者合作共赢计划 ”,依托计时软件有效计算开发费用,期望在实现双赢的基础上走出我们国人自己开源模式 ,详见 :Javashop第三方开发者合作共赢计划 Javashop v3.0 升级**志: 一、...

    架构革新,高效可控__架构转型 生态共赢.zip

    "架构革新,高效可控__架构转型 生态共赢"的主题,旨在探讨如何通过创新架构设计来提高运营效率,并构建一个互利共赢的生态系统。 架构转型是一个全面的过程,涉及到技术、组织、流程和文化的变革。首先,我们要...

Global site tag (gtag.js) - Google Analytics