轉 PHP在JVM上的實現JPHP

前兩天還在想,像Quercus只封裝了PHP在Java上的Web接口,有沒有實現了完整的JVM語言特性的東東,這不,來了。php

JPHP是一個面向Java虛擬機的PHP實現,支持PHP(5.3+)的不少特性。JPHP負責將PHP源代碼編譯爲JVM字節碼,使其可以運行在JVM上,這一點和JRuby、Jython等實現相似。它支持JDK 1.6及以上版本。該項目發起於去年10月。git

JPHP無心替代Zend PHP引擎或Facebook HHVM(HHVM的思路是將PHP編譯爲一種中間字節碼,再經過JIT將字節碼編譯爲x64機器碼)。出於如下緣由,設計者不打算爲JPHP實現Zend運行時庫(如Curl、PRCE等):github

  • 可以在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:oop

<?php
namespace {

    use php\lang\System;
    use php\lang\Thread;
    use php\swing\SwingUtilities;
    use php\swing\UIForm;
    use php\swing\UIManager;
    use php\swing\UIProgress;

    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);
        });
    });
}
相關文章
相關標籤/搜索