关于PHP/Java Bridge使用Object参数调用Java方法


About PHP/Java Bridge Invoke Java method with Object parameter

我成功地运行了Php/Java桥接项目和test.Php但我遇到了一个问题。我想调用一个带有Java Object参数的Java方法Java源代码:

public class OtherClass {
    public BaseBean funBean(BaseBean param){
        param.setName("Bean Name");
        return param;
    }
}
public class BaseBean {
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String name;
}

PHP脚本:我希望它能那样跑,它不能。

<?php
require_once("java/Java.inc");
//require_once("java/java_helper.php");
class BaseBean{
    public $name;
}
$eh = new java("com.anima.service.OtherClass");
$cla = new BaseBean();
$cla->name = "nameTest";
$eh->funBean($cla);
?>

或者有一些解决方案可以帮助我实现这个想法。我想用php对象调用java方法。

你能请任何人帮我做这件事吗。

提前谢谢。

我想您也应该将BaseBean创建为"java实例":

$cla = new java("com.anima.service.BaseBean");

或者,您可以尝试使用java_closure,但我认为在这种情况下,您必须更改java方法中的预期类型,如下所示:

public Object funBean(Object param){ ... }
$cla = new BaseBean();
$cla->name = "nameTest";
$jObjCla = java_closure($cla);
$eh->funBean($jObjCla);

我在PHP/Java桥接文档中发现,Java_closure方法有第三个参数,即创建的包装对象应该实现的Java接口数组:

java_closure(new Listener(), null, array(new Java("java.awt.event.ActionListener")));

Java源代码:

public interface IBaseBean {
    String getName();
    void setName(String name);
}
public class OtherClass {
    public IBaseBean funBean(IBaseBean param){
        param.setName("Bean Name");
        return param;
    }
}
public class BaseBean implements IBaseBean {
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String name;
}

PHP脚本:

<?php
require_once("java/Java.inc");
class BaseBean{
    public $name;
}
$eh = new java("com.anima.service.OtherClass");
$cla = new BaseBean();
$cla->name = "nameTest";
$jObjCla = java_closure($cla, null, array(new Java("com.anima.service.IBaseBean")));
$eh->funBean($jObjCla );
?>