写点什么

让 PHP 跑在 JVM 上——JPHP

  • 2014-03-26
  • 本文字数:825 字

    阅读完需:约 3 分钟

JPHP 是一个面向 Java 虚拟机的 PHP 实现,支持 PHP(5.3+)的很多特性。JPHP 负责将 PHP 源代码编译为 JVM 字节码,使其能够运行在 JVM 上,这一点和 JRuby、Jython 等实现类似。它支持 JDK 1.6 及以上版本。该项目发起于去年 10 月。

JPHP 无意替代 Zend PHP 引擎或 Facebook HHVM (HHVM 的思路是将 PHP 编译为一种中间字节码,再通过 JIT 将字节码编译为 x64 机器码)。出于以下原因,设计者不打算为 JPHP 实现 Zend 运行时库(如 Curl、PRCE 等):

  • 能够在 PHP 中使用 Java 类库
  • 通过 JIT 和 JVM 提升性能
  • 使用更好的运行时库替换 Zend PHP 丑陋的运行时库
  • 将 PHP 语言的使用范围扩充到 Web 之外
  • JVM 对 Unicode 字符串和线程支持更好

JPHP 有如下功能:

  • JIT(比 PHP 5.4 快 2-10 倍)
  • 优化器(优化常量表达式、内联函数等)
  • 可以在 PHP 代码中使用 Java 的类库和类
  • Unicode 字符串(类似 Java 中的 UTF-16)
  • 线程、套接字
  • 环境架构(类似 runkit zend 扩展中的沙盒对象)
  • 支持 GUI,基于 Swing 实现而且有所改进,提供了更为灵活的布局
  • 面向类和函数的内嵌缓存系统
  • 面向类和函数的可选热更新(Optional Hot Reloading)机制

语言方面的特性包括:

  • 完全支持 PHP 5.2+(包括 OOP)
  • 闭包(PHP 5.3),在闭包中自动绑定 $this(PHP 5.4)
  • 完全支持命名空间(PHP 5.3)
  • 类的 spl 自动加载(PHP 5.3)
  • Iterators、ArrayAccess 和 Serializable
  • 类、数组和 callable 的类型约束(PHP 5.4)
  • 数组短语法(PHP 5.4)
  • 针对循环引用的 GC(PHP 5.3)

更多特性可以查看该项目的 README 文件。

此外,JPHP 还提供了一些 PHP 不支持的特性,比如在 __toString 方法中可以使用异常、对标量的类型约束等。

JPHP 并非改进 PHP 性能的第一次尝试,到底效果如何,我们拭目以待。感兴趣的读者可以下载并动手尝试一下。


感谢孙镜涛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-03-26 20:575594
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 143.0 次阅读, 收获喜欢 35 次。

关注

评论

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

EDAS 4.0 助力企业一站式实现微服务架构转型与 K8s 容器化升级

阿里巴巴云原生

阿里云 云原生 PaaS EDAS

linux之ClamAV杀毒软件安装配置

入门小站

Linux

架构实战营 - 模块八作业

en

#架构实战营

模块三作业

lxz

.NET6新东西--CallerArgumentExpression

喵叔

11月日更

进击的Java(六)

ES_her0

11月日更

学生管理系统详细架构设计文档

21°Char

学习心得 - 架构训练营 - 第七课

Fm

在线英文名随机生成器

入门小站

工具

和12岁小同志搞创客开发:手撕代码,做一款声控灯

不脱发的程序猿

少儿编程 DIY 传感器 创客开发 Arduino

模块三作业

忘记喝水的猫

架构训练营

Go语言,定时器的使用

微客鸟窝

Go 语言 11月日更

模块三作业

周文

「架构实战营」

大数据训练营一期毕业作业

朱磊

对于排序号中参数值的校验

卢卡多多

参数校验 11月日更

14 K8S之对外访问容器服务

穿过生命散发芬芳

k8s 11月日更

再见了,纸币!数字人民币,席卷而来

CECBC

【高并发】从源码角度分析创建线程池究竟有哪些方式

冰河

Java 并发编程 多线程 高并发 异步编程

《PyTorch深度学习实战》复习之环境搭建

IT蜗壳-Tango

11月日更

聚焦云原生,阿里云与 CNCF 共话「云未来,新可能」

阿里巴巴云原生

阿里云 云原生 活动 KubeCON

PS 基础操作 - 缩放、抓手、移动工具

hepingfly

ps教程 ps学习笔记

架构营模块三作业

GTiger

架构实战营

MyBatis 中为什么不建议使用 where 1=1?

王磊

mybatis

PS 基础操作 - 文件格式和存储

hepingfly

ps教程 ps学习笔记

Android C++系列:JNI中的线程操作

轻口味

c++ android jni 11月日更

【Promise 源码学习】第七篇 - 实现 Promise 返回值 x 的处理

Brave

源码 Promise 11月日更

微服务中台技术之延迟中心实践

小江

Java redis kafka 延时队列

无处不在的 Kubernetes,难用的问题解决了吗?

阿里巴巴云原生

阿里云 Kubernetes 容器 云原生 难题攻克

【LeetCode】键值映射Java题解

Albert

算法 LeetCode 11月日更

设计消息队列存储消息数据的 MySQL 表格

缘分呐

低碳企业和个人如何参与碳交易市场?

石云升

碳中和 11月日更 碳交易

让PHP跑在JVM上——JPHP_PHP_臧秀涛_InfoQ精选文章