产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

Java 上的 PHP:对两者都好?

  • 2007-10-15
  • 本文字数:2774 字

    阅读完需:约 9 分钟

越来越多的迹象表明 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 解释器?

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 是创造敏捷应用的好手段。

查看英文原文: PHP on Java: Best of Both Worlds?

2007-10-15 19:315110
用户头像

发布了 225 篇内容, 共 63.6 次阅读, 收获喜欢 50 次。

关注

评论

发布
暂无评论
发现更多内容

浅谈函数式编程与 Stream

Dobbykim

1-3年Android开发工程师面试经验分享,程序员去大公司面试

android 面试 移动开发

Prometheus 2.25.0 新特性

耳东@Erdong

release Prometheus 9月日更

架构实战营 - 模块四作业

en

架构实战营

2019-2021历年阿里Android面试真题,面试杀手锏

android 面试 移动开发

Go 语言嵌入和多态机制对比

程序员历小冰

后端 引航计划

在线MySQL,SQL Server建表语句生成JSON测试数据工具

入门小站

工具

22. 哪种工作最容易被AI取代

Databri_AI

人工智能

10天拿到字节跳动安卓岗位offer,阿里内部Android应届生就业宝典

android 面试 移动开发

12个View绘制流程高频面试题,膜拜大牛

android 面试 移动开发

12年高级工程师的“飞升之路”,进阶学习资料

android 面试 移动开发

1307页字节跳动Android面试全套真题解析火了,阿里P8大牛亲自教你

android 面试 移动开发

异地多活知识总结

十二万伏特皮卡丘

聊聊最近看的几本书

卢卡多多

读书感悟 9月日更

Go 中队列的实现

baiyutang

9月日更

Kotlin DSL实现原理介绍

maijun

kotlin dsl

10天拿到字节跳动Android岗位offer,2021金三银四

android 面试 移动开发

10天拿到字节跳动Android岗位offer,【面试必会】

android 面试 移动开发

JDK 内置命令行工具学习笔记一

风翱

JVM 9月日更

数据仓库的特性

奔向架构师

数据仓库 9月日更

python学习:day3-流程控制

秦时明月

Python编程

1-3年Android开发工程师面试经验分享,资深大牛带你了解源码

android 面试 移动开发

“清洁地球日”看AI与碳中和:百度OCR成无纸化办公利器

百度大脑

人工智能

WEB架构的演变

Regan Yue

9月日更 WEB架构

10天拿到阿里Android岗offer,面试必知必会

android 面试 移动开发

2019-2021历年字节跳动Android面试真题解析,字节跳动高工面试

android 面试 移动开发

linux之pkill命令

入门小站

Linux

详解网商银行“三地五中心”数据部署架构

博文视点Broadview

10天拿到阿里Android岗offer,深入剖析

android 面试 移动开发

10天用Flutter撸了个高仿携程App,薪资翻倍

android 面试 移动开发

10天拿到字节跳动Android岗位offer,看完跪了

android 面试 移动开发

Java上的PHP:对两者都好?_Java_Mark Figley_InfoQ精选文章