纯java PHP引擎——Quercus

由于公司项目的需要,最经在研究Quercus一个纯java的php引擎。项目这两个需要做的就是将该引擎裁剪,做一个相对安全的版本,提供给ISV使用,同时,在引擎中提供默认的接口供调用。所以先研究了一下,在Quercus引擎的支持下,PHP如何与java集成。

以下是学习到的几点:

1、如果使用 Resin-IoC/WebBeans来组织应用的服务到脚本中,那么脚本中就可以直接获取到配置的服务的单例实例的引用,使用方式如下

 

<?php
  $demo_manager = java_bean("DemoeManager");
  $demo = $demo_manager->findData("demoId");
  foreach ($demo->getDatas() as $data) {
    echo $data . "/n";
  }
?>
2、另外一种可以通过new Java()方式,以class完整名称以及构造函数参数作为参数来生成对应的java 对象,例如
<?php
  $a = new Java("java.util.Date", 123);
  echo $a->time;
?>
3、Quercus还支持,类似于java 的引用方式,即,在PHP中使用import语句引入class,使用new关键字来创建对象。
<?php
  import java.util.Date;
  $a = new Date(123);
  echo $a->time;
?>
如果是使用Resin框架,会自动加载 WEB-INF/classes/classname.php中配置的的class。
4、在Quercus中,PHP的语法用于激活java对象的方法,下面说明一下通常的方法调用和属性的get和set
<?php
  import java.util.Date;
  $a = new Date(123);
  echo $a->getTime();    # calls getTime()
  echo $a->setTime(456); # calls setTime(456)
  echo $a->time;      # calls getTime()
  $a->time = 456;     # calls setTime(456)
?>
5、在Quercus中,java类被引入了,静态方式和静态属性是可以访问的
<?php
import java.util.Calendar;
$calendar = Calendar::getInstance();
var_dump($calendar);
?>
或者使用new java_class()方式获得class对象
<?php
  $class = java_class("java.lang.System");
  # System.in
  $in = $class->in;
  # System.currentTimeInMillis();
  $time = $class->currentTimeInMillis();
?>

6、关于java对象中的方法重载问题,PHP本身是不支持函数重载的,对参数个数的重载支持得还不错,但是参数个数相同,参数类型不同的重载

支持得就不太好了。我觉得是由于PHP本身所类型有关。比如下面的定义的java类

 

import com.caucho.quercus.module.AbstractQuercusModule;

public class MyModule extends AbstractQuercusModule
{
  public static void foo(String a, boolean b)
  {
  }

  public static void foo(String a, String b)
  {
  }
}
在PHP中调用
<?php
  foo('abc', false);
?>
就比较含糊,但是还是会调用foo(String a, boolean b)这个接口,因为这个参数类型最接近。尽量少用函数重载。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值