访问静态方法和字段
静态方法和字段使用 JavaClass 进行访问。对 Java 有一点差异,其中静态方法和字段直接使用类名称进行直接访问。以下代码说明了如何对 java.lang.System 调用 currentTimeMillis:
<?php
$system = new JavaClass("java.lang.System");
var_dump($system);
echo("</br>Current time: ".
$system->currentTimeMillis()."</br>");
?>
图 5 显示了在浏览器中运行此脚本的输出。
图 5. 访问静态方法的 Web 浏览器输出
访问静态字段与此类似。下面的代码显示 java.lang.Integer 类中的 MIN_VALUE 静态字段:
<?php
$integerClass = new JavaClass("java.lang.Integer");
var_dump($integerClass->MIN_VALUE);
?>
图 6 显示了在浏览器中运行此脚本的输出。
图 6. 访问静态字段的 Web 浏览器输出
在 PHP 中捕获 Java 异常
Java Bridge 将 Java 异常转换为 JavaException 的实例。这是在 PHP 脚本中捕获的通用 PHP 异常。以下代码片段显示了对 java.lang.System 上的 getProperty 的无效调用:
<?php
try {
$system = new JavaClass("java.lang.System");
$system->getProperty(FALSE);
} catch (JavaException $exception) {
echo "Cause: ".$exception->getCause();
}
?>
图 7 显示了在浏览器中运行此脚本的输出。
图 7. 捕获 Java 异常的 Web 浏览器输出
请注意,在 WebSphere sMash 1.0 中,getCause 方法将返回基础 Java 异常的类名称,而不是 所导致的异常本身。在最新的 Project Zero 构建版本中,这个奇怪的行为已经得到修复,将返回实际的 Java 异常。
从 Java 到 PHP 的类型转换
表 1 显示了 Java 类型如何转换为 PHP 类型。常规的做法是转换为尽可能减少潜在损失的类型(例如,将 int 转换为 byte)。另请注意,转换同样适用于受限和不受限 Java 类型,例如 Integer 和 int.
表 1. 从 Java 到 PHP 的类型转换
Java 类型
PHP 类型
注释
null
null
Integer/int
int
Double/double
double
Boolean/boolean
bool
Byte/byte
int
Character/char
int
Short/short
int
Long/long
int
Float/float
double
byte[]
string
String
string
此 PHP 字符串使用运行时编码进行编码。
Map
array
各个元素的类型按照此表进行转换,包括嵌套映射。
Object[]
array
请参见数组转换。
Anything Else!
n/a
这使用 Java Bridge 包装,成为通用 PHP 对象。