纯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.Abs
相关文档:
public static boolean isCheckN(String pInput) {
String regEx = "^[0-9]+$";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(pInput);
......
要在Java中获得某一变量的锁,必须在代码的首尾二端加上synchronized关健字,指明需要获得锁的对象。一旦线程开始执行synchronized块中的代码,它就获得了对这一对象的锁的控制权。同样,一旦线程已经离开了synchronized块,它也将释放这一对象的锁。我们已经知道,C#也有一个相似的被称作lock的关健字。除了lock这个关健字 ......
今天从同学们那里搞了两个翻墙软件,一个是无界,一个是自由门,刚听到翻墙软件大家一定很迷糊吧,我也是刚知道有这种东西,听说用这种软件可以访问一些被国家禁止访问的网站,确切的说就是一种代理机制,大家不要多想,我弄这个东西没别的目的,动机是很单纯的,就是想看一看全球最大的视频 ......
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)
Ctrl+D: 删除当前行
Ctrl+Alt+↓ 复制当前行到下一行(复制增加)
Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt+↑ 当前行和上面一行交互位置(同上)
Alt+← 前一个编辑的页面 ......