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 代码。