soluble/japha

Soluble PHP Java 桥接集成


README

PHP Version PHP Version PHP Version Build Status codecov Scrutinizer Code Quality Latest Stable Version Total Downloads License

简而言之,soluble-japha 允许在 PHP 中编写 Java 代码并与 JVM 生态系统交互。

请访问https://belgattitude.github.io/soluble-japha 网站,阅读文档以获取完整信息

无意义的示例

<?php
// Some standard JVM classes
$hashMap = $ba->java('java.util.HashMap', [
        'message' => 'Hello world',
        'value'   => $ba->java('java.math.BigInteger', PHP_INT_MAX)
]);
$hashMap->put('message', '你好,世界');
echo $hashMap->get('message');
<?php

use Soluble\Japha\Bridge\Exception;

// An imaginary java library class (i.e. NLP, Android, Jasper, Tensorflow,
// enterprise stuff, esoteric java lib/driver or your own Java class...)
try {
    $javaLib = $ba->java('an.imaginary.JavaLibraryClass', 'param1', 'param2');

    $results = $javaLib->aMethodOnJavaLibExecutedOnTheJVM(
                            // Method parameters
                            $hashMap->get('message'),
                            $ba->java('java.io.BufferedReader',
                                 $ba->java('java.io.FileReader', __FILE__)
                            ),
                            $ba->javaClass('java.util.TimeZone')->SHORT
                        );

    foreach ($results as $key => $values) {
        echo "$key: " . $values[0] . PHP_EOL;
    }
} catch (Exception\ClassNotFoundException $e) {
    echo $e->getMessage();
} catch (Exception\JavaException $e) {
    echo $e->getMessage() . ' [' . $e->getJavaClassName() . ']';
    echo $e->getStackTrace();
}

如果你想知道 $ba 对象是什么,它是对 Java 桥接服务器的连接

<?php

use Soluble\Japha\Bridge\Adapter as BridgeAdapter;
use Soluble\Japha\Bridge\Exception as BridgeException;

$options = [
    'servlet_address' => 'localhost:8080/MyJavaBridge/servlet.phpjavabridge'
];

try {
    $ba = new BridgeAdapter($options);
} catch (BridgeException\ConnectionException $e) {
    // Server is not reachable
    echo $e->getMessage();
}

用例

扩展 PHP 的视野至 Java 生态系统,特别是在你想利用以下内容时:

soluble-japha 所允许的自由并不适合所有场景。请务必阅读考虑性能部分,了解更多信息。

特性

soluble-japha 提供了一个与 Java 虚拟机交互的 PHP 客户端。

  • 从 PHP 编写 Java 代码 (类似于从等效的 Java 代码)
  • 从 PHP 端保持 程序性 代码控制 (面向函数 vs REST)
  • 在 JVM 上执行 Java 代码确保兼容性和效率 (代理对象)
  • 无需在使用之前编写服务层 (Java 对象是契约)
  • 运行时之间基于网络的快速通信,无需 JVM 启动努力。
  • 为创建、开发或发布基于 Java 库的 PHP 封装器提供坚实基础。

对于旧版本的用户,soluble-japha 客户端替代了原始/旧版 PHPJavaBridgeJava.inc 实现,并已完全重构以适应现代实践和 PHP7。有关详细信息,请参阅此处旧版兼容层

要求

  • 版本 ^3.0 需要 PHP 8.0 PHP Version
  • 版本 ^2.0 需要 PHP 7.1 PHP Version

重要。在 v0.13、v1.x、v2.x 和 v3.x 之间没有 API BC-BREAK,因此您应该可以在版本之间安全升级。选择递增版本号以停止支持旧版 PHP 版本是为了避免与多个 PHP 安装混淆。

如果您需要与旧版 PHP 版本兼容,请注意:

  • 版本 ^1.0 需要 PHP 5.6 PHP Version 并与 HHVM 兼容。
  • 版本 ^0.13 需要 PHP 5.5 PHP Version 并与 HHVM 兼容。

文档

安装

在您的 PHP 项目 (客户端) 中安装

$ composer require soluble/japha

考虑因素

简而言之,桥梁在需要直接在合理数量的方法调用中使用 Java 库时发光。否则,实现 REST 或 RPC 方法 以进行第一类系统集成。

与以资源为中心的解决方案(例如 REST 等)相比,soluble-japha 桥梁可以被视为一种 面向函数 的解决方案。与基于 REST 或甚至基于 RPC 的解决方案(如 XMLRPC、JsonRPC 或 gRPC)相比,桥梁跳过了在 Java 侧编写服务层的需要,并允许 PHP 开发者采用更 程序化 的方法。

根据使用情况,桥梁提供的自由度在性能方面可能会成为限制。请记住,桥梁对对象和方法调用(称为 往返)的数量很敏感,如果少量方法调用通常微不足道(一个 往返 通常小于 0.1ms),那么其目标场景可能会令人失望。在这些情况下,应考虑并应用传统的 REST 方法。

话虽如此,桥梁对于打算进行合理数量方法调用的场景来说是一个好、可靠且有时更可取的 REST 之上的替代品。

请务必阅读

支持

请将任何问题提交到 官方跟踪器。如果您想贡献,请参阅 贡献指南。所有 P/R 都非常欢迎。

致谢

特别提及

感谢 JetBrains 授予 PHPStorm 和 Idea 的开源许可证。真的推荐!!!

PHPStorm

编码标准和互操作性