当前位置: 首页 > 工具软件 > JPHP > 使用案例 >

JPHP——让PHP运行在JVM上,JVM作为php编译器的尝试

周博达
2023-12-01

 

早在前几年已经有了.net core php的实现,还顺带实现了jit(详见这里),不过.net core不太受linux平台的待见,普遍对.net的印象也是只能运行在windows下,.net也是近几年才支持跨平台,可惜是事后诸葛亮,马后炮,机会、风口已经错过,市场份额早已被个语言抢占,大局已定。.net要是早在十几年前支持跨平台或许也就没有java什么事了,现在支持跨平台或许.net还有救?

在探索JVM的过程中,突发奇想能不能让php运行在JVM上,结果还真找到了——JPHP。

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

 

目标

JPHP不能替代Zend PHP引擎或Facebook HHVM。我们不打算为JPHP实现zend运行时库(例如Curl,PRCE等)。

我们的项目于2013年10月开始。其原因如下:

  1. 能够在PHP中使用Java库(自己的扩展名其他
  2. 用更好的运行时库替换丑陋的Zend PHP运行时库。
  3. 不仅在网络上使用PHP语言
  4. 像Java和C#中一样的多线程。
  5. Unicode字符串(完全支持UTF-8,UTF-16)。
  6. 使用PHP语言创建GUI Android和桌面应用程序。

JPHP有如下功能:

  • PHP 7.1+(以及PHP 7.2、7.3、7.4的许多语言功能)。
  • JIT(JIT(比PHP 5.4快2-10倍),比PHP 5.6快2.5倍,比PHP 7.0快1.1倍,比PHP 7.4快13%,更慢的工作台)。
  • 在PHP代码中使用Java库和类。
  • 字符串的Unicode(UTF-16,类似于Java)
  • 线程套接字环境体系结构(如runkit zend扩展中的沙箱对象)。
  • GUI(JavaFXSWT
  • 嵌入式缓存系统的类和功能
  • 可选的热重载类和功能
  • 能够在Android OS上使用:jphp-android
  • 优化器(优化常量表达式、内联函数等)
  • 环境架构(类似runkit zend扩展中的沙盒对象)
  • 面向类和函数的内嵌缓存系统
  • 面向类和函数的可选热更新(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)

JPHP从PHP 7.2支持什么?

  • RFC以外的所有功能:参数类型扩展

JPHP从PHP 7.3支持什么?

  • 除RFC外的所有功能:灵活的Heredoc和Nowdoc语法

JPHP从PHP 7.4支持什么?

  • 键入属性2.0(部分不支持引用)
  • 参考文献薄弱
  • 箭头函数2.0(+多行语法)
  • 允许从__toString()引发异常
  • 空合并分配运算符
  • numeric_literal_separator
  • 数组表达式中的扩散运算符

JPHP自带扩展

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

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

JPHP并非改进PHP性能的第一次尝试。

 

更多关于JPHP的信息请参见:

JPHP API文档:https://github.com/jphp-group/jphp/blob/master/jphp-runtime/api-docs

JPHP项目地址:https://github.com/jphp-group/jphp

JPHP官网:http://jphp.develnext.org/

JPHP概览:https://github.com/jphp-group/awesome-jphp

 

 类似资料: