由于公司项目的需要,最经在研究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)这个接口,因为这个参数类型最接近。尽量少用函数重载
分享到:
相关推荐
是一个开源 PHP 5 引擎,它已经拥有了纯 Java 的完整实现。Quercus 文档指出,Quercus 在 Resin 应用服务器之上运行,利用了负载平衡、代理缓存等 Resin 特性。本文介绍了在 Apache Tomcat 之上运行 Quercus 所提供...
开发环境 eclipse java EE 4.5.0,jdk 1.7,Tomcat 7.0,Quercus 4.0.39 由Eclipse-jee生成的Dymanic Web Project,Dynamic web module version 3.0(eclipse版本太旧可能没法用) 集成了Quercus,让php也能在...
Quercus是Caucho公司采用纯Java开发的一个PHP5引擎,在Java下运行php ,很强大 。
jvm 里边运行php程序的包,解决了中文乱码问题. 注意使用UTF-8编码保存页面格式.resin下替换原版就可以了.其它jsp服务器比如tomcat,要script-10.jar 可以拷贝resin3.x里边的包.使用方法看resin帮助.
Google app engine提供了虚拟服务器,但是目前只能支持python和java语言。php语言只有通过认证才可以使用,但是很难通过认证。本人做了一个通过quercus使php项目能运行到GAE上,这是简单的项目内容
代码可以放在 tomcat 环境下运行(放到 tomcat 安装目录下启动 tomcat 即可),也可以用eclipse 打开,项目用 easyui 做前段框架,使用 php 做后台开发,请求用 的ajax,数据库使用 MySQL 5.6 。项目压缩包里包含 sql...
基于Java 的 PHP 框架 4.0.37 版本,解压后放入放入web服务器,在该目录下即可运行php,具体请自己找文档。
简单配置PHP与java集成的三项技术,这种资源网上很少
官方地址http://quercus.caucho.com/
GAE虽然支持java了,但不幸的是依然不支持php 但是我们可以使用基于java的Quercus基本上可以100%的支持PHP语言
GAE 中运行PHP程序,只要你把 Quercus 集成到你的 GAE 中,你自然也可以运行PHP脚本了。
script-api.jar、php-script.jar、JavaBridge.jar、php-servlet.jar四个jar包
<servlet-name>Quercus Servlet <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class> <param-name>license-directory <param-value>WEB-INF/licenses <servlet-name>Quercus ...
Zeen橡树(Quercus faginea)是地中海西部特有的一种森林树种,在阿尔及利亚非常著名。 它是一棵落叶或半永久叶子的橡树。 栎(Quercus faginea)非常多态,特别是在叶片特性方面,因此在阿尔及利亚有两个亚种:栎...
它使用嵌入在插件中的Quercus Java PHP引擎 无需BOSH服务器。 它使用Jetty Websockets或Openfire BOSH服务 要配置Jappix设置,请编辑/php/read-main.php和red-host.php 要使用jappix Mini,请编辑minichat.html ...
云南保山上新统Quercus presenescens Z. K. Zhou角质层特征及古气候意义,李娜,孙柏年,在云南保山上新统羊邑组发现了一栎属高山栎组植物压型化石—前灰背栎(Quercus presenescens Z. K. Zhou),并对其进行了宏观...
栎属黑暗 栎属的深色主题| 多伦多大学
Quercus Robusta是可重用的开源C ++应用程序框架。 它支持重新计数GC,灵活的多态容器,便携式多线程和GUI。
不过,Stock Quercus 有 ClassLoader 问题。 修补 Quercus 可以解决这个问题。 无论如何,Quercus 无法运行所有 Drupal 7,这是我感兴趣的主要应用程序。 当 Quercus 兼容时,我希望我希望它运行 Drupal 8。 路线图...
resin-4.0.28 Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。