soluble / japha
Soluble PHP Java 桥接集成
Requires (Dev)
- belgattitude/pjbserver-tools: ^3.1.0 || ^4.0
- dms/phpunit-arraysubset-asserts: ^v0.2.1
- friendsofphp/php-cs-fixer: v2.18.5
- infection/infection: ^0.21.5
- monolog/monolog: ^2.2.0
- phpstan/phpstan: ^0.12.84
- phpstan/phpstan-phpunit: ^0.12.17
- phpstan/phpstan-strict-rules: ^0.12.9
- phpunit/phpunit: ^9.5.4
Suggests
- monolog/monolog: PSR-3 comptatible logger
- dev-master
- 3.0.0
- 2.8.1
- 2.8.0
- 2.7.0
- 2.6.4
- 2.6.3
- 2.6.2
- 2.5.1
- 2.5.0
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.0
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.0
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.1
- 1.0.0
- 0.14.4
- 0.14.3
- 0.14.2
- 0.14.1
- 0.14.0
- 0.13.0
- 0.12.0
- 0.11.9
- 0.11.8
- 0.11.7
- 0.11.6
- 0.11.5
- 0.11.4
- 0.11.3
- 0.11.2
- 0.11.1
- 0.11.0
- 0.10.0
- 0.9.20
- 0.9.19
- 0.9.18
- 0.9.17
- 0.9.16
- 0.9.15
- 0.9.14
- 0.9.13
- 0.9.12
- 0.9.11
- 0.9.10
- 0.9.9
- 0.9.8
- 0.9.7
- 0.9.6
- 0.9.4
- 0.9.2
- dev-feat/invalid-array-access
- dev-chore/publish-action
- dev-v1.x_php56compat
- dev-pre5.6_0.13.0
This package is auto-updated.
Last update: 2024-09-09 23:00:21 UTC
README
简而言之,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 生态系统,特别是在你想利用以下内容时:
- 一些有吸引力的库 (Jasperreports, CoreNLP, FlyingSaucer, Jsoup...)
- 利用 JVM 性能 (Deeplearning4J...) 或封装器 (TensorFlow Java Api...)。
- 当没有纯 PHP 替代方案时 (Android, driver, closed api, enterprise...)
- 或者仅仅为了乐趣。
特性
soluble-japha
提供了一个与 Java 虚拟机交互的 PHP 客户端。
- 从 PHP 编写 Java 代码 (类似于从等效的 Java 代码)。
- 从 PHP 端保持 程序性 代码控制 (面向函数 vs REST)。
- 在 JVM 上执行 Java 代码确保兼容性和效率 (代理对象)。
- 无需在使用之前编写服务层 (Java 对象是契约)。
- 运行时之间基于网络的快速通信,无需 JVM 启动努力。
- 为创建、开发或发布基于 Java 库的 PHP 封装器提供坚实基础。
对于旧版本的用户,soluble-japha 客户端替代了原始/旧版 PHPJavaBridge 的
Java.inc
实现,并已完全重构以适应现代实践和 PHP7。有关详细信息,请参阅此处的旧版兼容层。
要求
重要。在 v0.13、v1.x、v2.x 和 v3.x 之间没有 API BC-BREAK,因此您应该可以在版本之间安全升级。选择递增版本号以停止支持旧版 PHP 版本是为了避免与多个 PHP 安装混淆。
如果您需要与旧版 PHP 版本兼容,请注意:
文档
安装
在您的 PHP 项目 (客户端) 中安装
$ composer require soluble/japha
考虑因素
简而言之,桥梁在需要直接在合理数量的方法调用中使用 Java 库时发光。否则,实现 REST 或 RPC 方法 以进行第一类系统集成。
与以资源为中心的解决方案(例如 REST 等)相比,soluble-japha 桥梁可以被视为一种 面向函数
的解决方案。与基于 REST 或甚至基于 RPC 的解决方案(如 XMLRPC、JsonRPC 或 gRPC)相比,桥梁跳过了在 Java 侧编写服务层的需要,并允许 PHP 开发者采用更 程序化 的方法。
根据使用情况,桥梁提供的自由度在性能方面可能会成为限制。请记住,桥梁对对象和方法调用(称为 往返
)的数量很敏感,如果少量方法调用通常微不足道(一个 往返
通常小于 0.1ms),那么其目标场景可能会令人失望。在这些情况下,应考虑并应用传统的 REST 方法。
话虽如此,桥梁对于打算进行合理数量方法调用的场景来说是一个好、可靠且有时更可取的 REST 之上的替代品。
请务必阅读
- http://docs.soluble.io/soluble-japha/bridge_how_it_works/
- http://docs.soluble.io/soluble-japha/bridge_benchmarks/
支持
请将任何问题提交到 官方跟踪器。如果您想贡献,请参阅 贡献指南。所有 P/R 都非常欢迎。
致谢
- 此代码主要由 Sébastien Vanvelthem 开发和维护。
- 特别感谢 所有这些优秀的贡献者
- 此项目基于 PHPJavaBridge 开发者所做的 Java.inc 工作。
特别提及
感谢 JetBrains 授予 PHPStorm 和 Idea 的开源许可证。真的推荐!!!