写点什么

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:315351
用户头像

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

关注

评论

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

移动端动态化发展:技术演进与生态建设实践

xuyinyin

Spring项目开发的智能助手:通义灵码使用指南

阿里云云效

云计算 spring

Web3项目的开发

北京木奇移动技术有限公司

区块链技术 web3开发 软件外包开公司

Cloud Kernel SIG 季度动态:发布ANCK 6.6-003版本,支持一测多证

OpenAnolis小助手

操作系统 龙蜥社区 OpenAnolis 龙蜥社区SIG

CAD把PDF图纸插入为光栅图像

极客天地

5分钟掌握!DolphinScheduler时间参数动态配置秘籍

白鲸开源

大数据 开源 Apache DolphinScheduler 任务调度 大数据调度

中国企业出海的驱动力、跨端技术创新及流量分发新模式

xuyinyin

Apache DolphinScheduler 3.3.0 Alpha发布,功能增强与性能优化大升级!

白鲸开源

大数据 开源 Apache DolphinScheduler 任务调度 发版

2025慕尼黑上海电子展揭秘汽车电子新动能:智能电动化浪潮下,汽车半导体如何赋能行业未来发展?

极客天地

全双工分轨语音数据集:让AI实现无缝对话

数据堂

人工智能 语音识别 语音交互 语音数据集 全双工分轨语音数据集

龙蜥社区荣获 OS2ATC 2025 “最具影响力开源创新贡献奖”

OpenAnolis小助手

开源 操作系统 龙蜥社区 OpenAnolis

龙蜥RISC-V SIG 2.0研讨会圆满举办,宋卓当选国际基金会Datacenter SIG主席

OpenAnolis小助手

AI 操作系统 高性能计算 龙蜥社区 OpenAnolis

CAD如何炸开参照图形

极客天地

2025慕尼黑上海电子展揭示技术密码:机器人行业蓬勃发展,半导体“芯脏”如何给予支撑?

极客天地

CrossOver 25重磅发布:众多革命性突破带给你更强的Mac游戏兼容性

阿拉灯神丁

兼容性测试 CrossOver Mac下载 Mac游戏推荐 mac虚拟机软件

Dinky 和 Flink CDC 在实时整库同步的探索之路

Apache Flink

大数据 flink 实时计算

私有云统一管理定义以及好处简单说明

行云管家

云计算 私有云 云管理

【轻量化】三个经典轻量化网络解读

地平线开发者

自动驾驶; 算法工具链 地平线征程6

CAD粘贴表格显示#怎么办

极客天地

Paragon NTFS与Tuxera NTFS有何区别 Mac NTFS 磁盘读写工具选哪个好

阿拉灯神丁

Mac 软件 Paragon NTFS NTFS 磁盘管理器 Tuxera NTFS2024 磁盘格式读写软件

倒计时三年,国产化替代100%进度走到哪了?

禅道项目管理

信创 项目管理软件 国产化替代

导师招募!Apache DolphinScheduler开源之夏2025等你领航!

白鲸开源

开源 Apache DolphinScheduler 开源之夏

运维堡垒机-开启IT安全运维利器!

行云管家

网络安全 堡垒机 数字安全

是时候重新审视“小米模式”了

脑洞汽车

智能电车

DNS常见问题:什么是主机记录和记录值?

国科云

Agentic AI 干货!DeepSeek + OpenAI SDK 构建 Agent 实战

七牛云

AI

Spring项目开发的智能助手:通义灵码使用指南

阿里巴巴云原生

spring

龙蜥社区两大委员会月度会议圆满召开

OpenAnolis小助手

开源 操作系统 龙蜥社区

​​AMS行政管理系统:数字化赋能人力资源精益管理​

秃头小帅oi

基于Raft协议 + gRPC长连接实现集群间的服务发现、服务注册、元数据共享、元数据持久化

路 飞

Web3项目开发的测试

北京木奇移动技术有限公司

区块链技术 软件外包公司 web3开发

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