2016-04-25 10 views
0

Java:PHP-Java-Bridge, Nutzung von Extend?

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")); 

Sie in der PHP-Code ein PHP-Klasse erweitern Java-Klasse und die set() Methode ist die Java-Methoden sehen, die auf der Java-Seite PHP-Klasse verstreichen lassen.

Könnte es "!!!!" drucken? nicht "...."?

Ich weiß, py4j könnte es tun, fragen sich, wie PHP/Java Bridge es tun?

+0

http://blog.csdn.net/guotong1988/article/details/51251396 –

Antwort

0

Sie können es mit einer benutzerdefinierten php5/php7 __autoload -Funktion implementieren, die jedes Argument überprüft und es, wenn es sich um eine Instanz von Java handelt, mit java_closure() mit einer Liste generierter Schnittstellen für den umschlossenen Java-Typ umschließt. In Pseudo-Code so etwas wie:

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

Bedürfnisse nicht mehr als ~ 10-15 Zeilen von additinal PHP-Code in Java.inc.