Jphp
JPHP — Это альтернативная реализация PHP для Java VM с поддержкой JIT. Проект начался в октябре 2013 года и за 4 месяца был реализовал компилятор php в байткод JVM. Язык поддерживается на уровне PHP 7.1, но без анонимных классов. По своей идеологии проект напоминает JRuby и Jython. JPHP распространяется бесплатно с использованием лицензии Apache 2.0.
Главные отличия JPHP от PHP :
- JIT-компиляция
- Юникод (UTF-16)
- Многопоточность, Сокеты, Окружения (Environment)
- GUI (JavaFX, Swt)
- Втроенная система кеширования для классов и функциий
- Удобное API
- Собственный Пакетный менеджер
Язык JPHP в отличии от PHP можно использовать не только для написания web приложений. JPHP можно использовать в качестве языка для написания GUI приложений с использованием JavaFX или Swt. Можно использовать для создание web серверов с использованием jetty. Или же для написания android приложений (пока в разработке). Для языка JPHP была написана среда разработки графических приложений develnext.
Примеры[править]
<syntaxhighlight lang="php" line="1">
<?
// web server
use php\http\HttpServer;
use php\http\HttpServerRequest;
use php\http\HttpServerResponse; // import classes from jphp-httpserver-ext
$server = new HttpServer(5000, "localhost");
$server->get("/", function (HttpServerRequest $req, HttpServerResponse $res) {
$res->charsetEncoding("UTF-8"); // set UTF-8
$res->body("<h1>Hello {$req->remoteAddress()}, from JPHP!</h1>");
});
$server->stopAtShutdown(true);
$server->run(); // start server on http://localhost:5000
</syntaxhighlight><syntaxhighlight lang="php" line="1">
<?
// JavaFX GUI Application
use php\gui\{ UXApplication, UXForm }; // import JavaFX classes from jphp-gui-ext
UXApplication::runLater(function () {
$form = new UXForm(); // create new form
$form->title = "Hello, World!!";
$form->size = [300, 200];
$form->show(); // show form
});
</syntaxhighlight><syntaxhighlight lang="php" line="1">
<?
// new API
use php\io\Stream;
use php\lib\str;
use php\util\Flow;
use php\util\Regex;
str::shuffle($str); // New API for primitive types
// API for Streams instead of fopen, fclose, etc.
Stream::getContents('path/to/file');
// API for regex instead of preg_*
$valid = Regex::match('^[a-z]+$', $str);
// Flow API for iterators and arrays
echo Flow::of([1, 2, 3])
->map(function($n) { return $n * 10; })
->reduce(function(&$r, $n) { $r += $n; });
</syntaxhighlight><syntaxhighlight lang="php" line="1">
<?
// multi threading
$thread = new Thread(function () {
$i = 0;
while (true) {
$i++;
echo $i, "\n";
sleep(2); // every 2 seconds
}
});
$thread->start(); // start thread
</syntaxhighlight><syntaxhighlight lang="php" line="1">
<?
// unicode
use php\lib\str;
// Unicode like in Java, UTF-16
// (from japan) programing language
$str = "プログラミング言語";
// Get length of the unicode string
echo str::length($str);
// Change symbol by index
$str[1] = '語';
echo $str;
</syntaxhighlight>