Джава:
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 test\HelloWorld;
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?
Вы можете реализовать его с помощью пользовательской функции __autoload php5 / php7, которая проверяет каждый аргумент и, если это экземпляр Java, упаковывает его с помощью java_closure () со списком сгенерированных интерфейсов для обернутого типа Java. В псевдокоде что-то вроде:
java_autoload_function() {...
__call(java_closure($type, null, $Class->getInterfaces($type)))
}
Требуется не более ~ 10-15 строк дополнительного PHP-кода в Java.inc.
Других решений пока нет …