• 转 PHP在JVM上的实现JPHP


    前两天还在想,像Quercus只封装了PHP在Java上的Web接口,有没有实现了完整的JVM语言特性的东东,这不,来了。

    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性能的第一次尝试,到底效果如何,我们拭目以待。感兴趣的读者可以下载并动手尝试一下

    写GUI:

    <?php
    namespace {
    
        use phplangSystem;
        use phplangThread;
        use phpswingSwingUtilities;
        use phpswingUIForm;
        use phpswingUIManager;
        use phpswingUIProgress;
    
        UIManager::setLookAndFeel(UIManager::getSystemLookAndFeel());
    
        SwingUtilities::invokeLater(function(){
            $form = new UIForm();
            $form->size = [500, 500];
            $form->moveToCenter();
            $form->visible = true;
    
            $p = new UIProgress();
            $p->size = [300, 40];
            $p->position = [100, 100];
            $p->value = 50;
            $form->add($p);
    
            $form->on('windowClosing', function(){
                System::halt(0);
            });
        });
    }
  • 相关阅读:
    centos7 Nginx1.14+php7+mysql5.7 以及 centos7 Apache2.4+PHP7+mysql 安装 Linux 配置 composer 以及Python2.7升级到3.7
    微信遇到的几个小问题
    前段mui框架初识
    关于百度编辑器设置默认行间距段间距
    call与apply 以及闭包
    随笔日记2018 4.10 关于多选框
    关于JVM中的两个Survivor区
    (转)Struts2的工作原理
    (转)struts2的执行流程、工作原理
    (转)最大乘积分析(切绳子)
  • 原文地址:https://www.cnblogs.com/x3d/p/3631386.html
Copyright © 2020-2023  润新知