在WebSphere sMash中集成Java和PHP(3)

    访问静态方法和字段

静态方法和字段使用 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 浏览器输出

在WebSphere sMash中集成Java和PHP

访问静态字段与此类似。下面的代码显示 java.lang.Integer 类中的 MIN_VALUE 静态字段:

<?php
$integerClass = new JavaClass("java.lang.Integer");
var_dump($integerClass->MIN_VALUE);
?>

 

图 6 显示了在浏览器中运行此脚本的输出。

    图 6. 访问静态字段的 Web 浏览器输出

在WebSphere sMash中集成Java和PHP

    在 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中集成Java和PHP

请注意,在 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 对象。  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzywsw.html