阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

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

关注

评论

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

文心一言 VS 讯飞星火 VS chatgpt (111)-- 算法导论10.2 2题

福大大架构师每日一题

福大大架构师每日一题

合约量化/现货交易/合约跟单/秒合约/系统开发技术分析

V\TG【ch3nguang】

CSS小技巧之绘制心形图案

南城FE

CSS css3 前端 心形

运营SOP,高效运营的核心打法

用友BIP

数智营销

Mac平台视频后期合成和特效制作软件:Nuke 15

展初云

Mac Mac软件 视频后期制作 nuke

语音识别技术:从传统到现代的飞跃

来自四九城儿

哪家强?Bitget Wallet vs Metamask 从安全性能角度全方位 PK

股市老人

合约跟单/交易所开发方案,合约跟单/交易所系统dapp开发(稳定版)丨源码规则详细

V\TG【ch3nguang】

GitHub爆赞,啃完这份500多页Java多线程笔记,阿里入职在望

程序员万金游

#java #程序员 #学习 #并发 #多线程

全网最细-深度解析 Istio Ambient Mesh 流量路径

阿里巴巴云原生

阿里云 云原生 服务网格

软件开发人员 Kubernetes 入门指南|Part 2

SEAL安全

软件开发 kubernetes 运维 企业号10月PK榜

Mac具有AI技术的创意图像编辑器Luminar Neo

展初云

Mac软件 AI技术图像编辑 图像编辑工具

不同MBTI的HR是怎样做招聘的?

用友BIP

数智招聘

【评测有奖】参加 SAE 2.0 产品评测,赢 Airpods 2 大奖!

阿里巴巴云原生

阿里云 Serverless 云原生

蓝易云:SSD固态硬盘和HDD机械硬盘服务器区别

百度搜索:蓝易云

Linux 运维 SSD 云服务器 HDD

财务共享中心的人员如何进行“选、育、用、留”?

用友BIP

财务共享

Linux和UNIX的关系及区别

二哈侠

简洁的看图软件 XnViewMP激活中文最新版

胖墩儿不胖y

Mac软件 看图软件 图像编辑器

GTD任务管理器Omnifocus Pro 3,合理规划自己的时间

展初云

Mac GTD 待办记事软件

文本快速输入工具 Rocket Typist pro最新激活版

mac大玩家j

Mac软件 文本输入工具

交易所开发(海外版)/交易所系统开发(案例详细)/交易所系统源码及demo

V\TG【ch3nguang】

蓝易云:linux iptables安全技术与防火墙

百度搜索:蓝易云

云计算 Linux iptables 云服务器

DevEco Hvigor高效编译,构建过程新秘籍

HarmonyOS开发者

HarmonyOS

合约跟单系统开发/跟单量化交易机器人/合约交易技术开发详情

V\TG【ch3nguang】

数字时代的自我呈现:探索个人形象打造的创新工具——FaceChain深度学习模型工具

汀丶人工智能

人工智能 计算机视觉 图像生成

Python 集合(Sets)2

小万哥

Python 程序员 软件 后端 开发

语音识别技术的优化与发展趋势

来自四九城儿

Swap去中心化交易所/系统开发技术/Swap智能合约交易所源码搭建

V\TG【ch3nguang】

基于 ACK Fluid 的混合云优化数据访问(五):自动化跨区域中心数据分发

阿里巴巴云原生

阿里云 云原生 ACK

合约跟单/永续合约系统开发/交割合约/现货交易/Python技术编写

V\TG【ch3nguang】

BigTime会是链游新的领航员吗?

币离海

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