由于公司项目的需要,最经在研究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也能在...
通过上述三种技术——SOAP、Quercus和PHP/JavaBridge,开发人员能够灵活地在PHP和Java之间搭建桥梁,实现跨语言的协同工作。每种技术都有其独特的优势和适用场景,选择合适的方案可以极大提升Web应用的开发效率和...
jvm 里边运行php程序的包,解决了中文乱码问题. 注意使用UTF-8编码保存页面格式.resin下替换原版就可以了.其它jsp服务器比如tomcat,要script-10.jar 可以拷贝resin3.x里边的包.使用方法看resin帮助.
这通常涉及到在PHP应用程序中调用Java代码,例如通过JavaBridge或使用像Quercus这样的PHP到Java的转换器。以下是对这个主题的详细阐述: 1. **PHP与Java交互** PHP是一种广泛使用的开源脚本语言,主要应用于Web...
Quercus是Caucho公司采用纯Java开发的一个PHP5引擎,在Java下运行php ,很强大 。
Google app engine提供了虚拟服务器,但是目前只能支持python和java语言。php语言只有通过认证才可以使用,但是很难通过认证。本人做了一个通过quercus使php项目能运行到GAE上,这是简单的项目内容
这篇讨论主要聚焦于三种有效的协同开发方案:SOAP、php-java-bridge和Quercus,旨在帮助技术经理做出明智的决策。 首先,SOAP(Simple Object Access Protocol)是一种基于XML的通信协议,设计用于跨平台、跨语言的...
代码可以放在 tomcat 环境下运行(放到 tomcat 安装目录下启动 tomcat 即可),也可以用eclipse 打开,项目用 easyui 做前段框架,使用 php 做后台开发,请求用 的ajax,数据库使用 MySQL 5.6 。项目压缩包里包含 sql...
PHP可以通过JavaBridge、Quercus等工具直接调用Java类库,实现两者的无缝集成。 6. **优点**:LAJP的优势在于结合了Java的强类型和企业级特性以及PHP的快速开发能力。Java处理后台服务,保证系统的稳定性和安全性,...
这里,我们主要探讨的是使用Quercus,一个用Java实现的PHP解释器,使得PHP代码能够在Java平台上运行,包括GAE。 Quercus是由Caucho Technology开发的,它是一个高性能、全功能的PHP 5实现,完全用Java编写。它的...
基于Java 的 PHP 框架 4.0.37 版本,解压后放入放入web服务器,在该目录下即可运行php,具体请自己找文档。
要让Tomcat处理PHP,我们需要一个中间件,例如`Quercus`或者`PHP-Java Bridge`,这两个都是允许Java和PHP之间交互的解决方案。 1. **Quercus**:这是一个完全用Java编写的PHP解释器,它可以被Tomcat直接识别和执行...
JavaBridge.jar、php-script.jar 和 php-servlet.jar 是在Apache Tomcat服务器上运行PHP应用程序的关键...此外,随着技术的发展,现在有更多如Quercus这样的解决方案,它们提供了更高效的方式在Java环境中运行PHP代码。
4. 使用第三方库:有一些PHP库如Phalanger或Quercus,它们提供了在PHP中直接解释Java字节码的能力。这种方式可以直接引入Java的jar包,但是可能需要处理兼容性和性能问题。 在实际操作中,我们需要根据项目需求和...
要让Tomcat运行PHP,我们需要一个中间件,如Quercus(一个纯Java实现的PHP解释器)或通过JNI(Java Native Interface)来调用PHP-CGI。 2. **Quercus**:Quercus是由Caucho Technology开发的一个开源项目,它允许在...
描述中提到的"基于java的Quercus"是一个关键的解决方案,它是一个兼容PHP的Java实现,可以让我们在不直接支持PHP的GAE上运行PHP代码。 Quercus是由Caucho Technology开发的一个高性能的PHP解释器,它完全用Java编写...
最常见的解决方案是使用`JPHP`或`Quercus`(一个纯Java实现的PHP解释器)。这些工具允许你在Java环境中执行PHP代码。 2. **配置Tomcat**:安装桥接器后,你需要对Tomcat进行配置。这可能包括编辑`server.xml`文件,...
Quercus允许PHP代码直接在Java虚拟机(JVM)中运行,而mod_proxy则可以将HTTP请求路由到Tomcat,使得PHP可以与Apache一起工作。 4. **jar包**:在Java世界中,jar(Java Archive)文件是一种归档格式,用于收集多个...