PHP-Java-Bridge,扩展的使用



Java:

package test;
public class HelloWorld {
public HelloWorld(String args){
}
public void ppp(){
    System.out.println("....");
};
public  void set(HelloWorld hw){
    hw.ppp();
}
public static final String JAVABRIDGE_PORT = "28080";
static final php.java.bridge.JavaBridgeRunner runner = php.java.bridge.JavaBridgeRunner
        .getInstance(JAVABRIDGE_PORT);
public static void main(String args[]) throws Exception {
    runner.waitFor();
}
}

.PHP:

<?php
require_once("/home/gt/workspace/JavaPhp/Java.inc");
use testHelloWorld;
class abc extends HelloWorld{
function ppp(){
echo "!!!!";
}
}
$hw =new java("test.HelloWorld","str");
$hw -> set(new abc("str"));

你可以在PHP代码中看到一个php类扩展Java类,set()方法是Java的方法,它让PHP类传递给Java端。

它可以打印"!!!"而不是"...."吗?

我知道py4j可以做到,想知道PHP/Java Bridge是如何做到的?

您可以使用自定义的 php5/php7 __autoload函数来实现它,该函数检查每个参数,如果它是 Java 的实例,则使用 java_closure() 将其包装为包装的 Java 类型生成的接口列表。在伪代码中,如下所示:

java_autoload_function() {...
__call(java_closure($type, null, $Class->getInterfaces($type)))
}

在 Java.inc 中需要不超过 ~10-15 行额外的 PHP 代码。

最新更新