写点什么

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

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

关注

评论

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

NodeJS mysql需要注意sql注入 🎈

德育处主任

Node SQL注入 6月月更

CVPR2022 | 上科大x小红书首次提出动作序列验证任务,可应用于体育赛事打分等多场景

小红书技术REDtech

Transformer CVPR2022 视频动作理解 动作序列验证

西安Java培训 | java设计模式之工厂设计模式

@零度

设计模式 JAVA开发

一条命令开启监控之旅!

TanCloud探云

开源 监控系统

C#入门系列(二十一) -- 面向对象之继承

陈言必行

C# 6月月更

浅谈SpringMVC五大组件以及对执行原理的分析

百思不得小赵

springmvc Java EE 6月月更

视频一对一源码,简单的搭建方式也有技术要求

开源直播系统源码

软件开发 二次开发 一对一源码

啃论文俱乐部 | 压缩算法团队:我们是如何开展对压缩算法的学习研究

OpenHarmony开发者

OpenHarmony

剖析 SPI 在 Spring 中的应用

vivo互联网技术

spring Java’ JavaSPI Spring SPI Dubbo SPI

知识管理系统有效推动中小企业信息化发展

小炮

实践 DevOps 时,可能面临的六大挑战

飞算JavaAI开发助手

InfoQ 极客传媒 15 周年庆征文|分布式设计介绍

No Silver Bullet

6月月更 InfoQ极客传媒15周年庆 分布式设计

深度学习编程常用工具Jupyter Notebook

Damon

深度学习 Jupyter Notebook jupyterlab 6月月更

浅谈DOM中的类型

大熊G

JavaScript 前端 6月月更

Flink CDC MongoDB Connector 的实现原理和使用实践

Apache Flink

mongodb 大数据 flink 流计算 实时计算

电商增长红海突围,借势小程序生态

Speedoooo

小程序 小程序生态 电商 移动开发 小程序运行时

SAP Marketing Cloud Restful API SDK 使用案例分享

汪子熙

云计算 SaaS SAP 6月月更 Marketing Cloud

见证荣耀|长三角区块链应用创新大赛复赛于旺链科技成功举办

旺链科技

区块链 产业区块链 区块链应用创新

今天 2 点:关于龙蜥社区云原生 SIG 及安全容器 runD 介绍 | 第 24 期

OpenAnolis小助手

开源 云原生 虚拟化 sig 龙蜥大讲堂

修修补补一时爽,果断重构有担当——聊聊CRM分布式缓存优化

鲸品堂

分布式缓存

Linux开发_文件发送与接收

DS小龙哥

6月月更

Flutter 中的 Flash 错误消息

坚果

6月月更

浅聊一下数据监控(针对MSSQL)

为自己带盐

SqlServer 数据监控 6月月更

小程序直播互动功能运行在App里?

Speedoooo

小程序 直播带货 移动开发 直播技术 小程序容器

我把 b 站拉黑了!

博文视点Broadview

北京Java培训 | java设计模式之原型模式

@零度

JAVA开发 原型设计模式

居家办公初体验之新得分享| 社区征文

阿Q说代码

居家办公 初夏征文 心得分享

中国信通院首届3SCON软件供应链安全会议成功召开 聚焦软件供应链全链路安全

中国IDC圈

安全 软件安全

应用配置管理,基础原理分析

Java 微服务 构架

【LeetCode】 移除字母异位词后的结果数组Java题解

Albert

LeetCode 6月月更

如何写出同事看不懂的Java代码?

码农参上

后端 Java’

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