【问题标题】:PHP-Java-Bridge , usage of extend?PHP-Java-Bridge ,扩展的用法?
【发布时间】:2016-04-25 12:29:40
【问题描述】:

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 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 是如何做到的?

【问题讨论】:

标签: java php php-java-bridge py4j


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    相关资源
    最近更新 更多