TypePHP 编译器 https://swoole.com/aot/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

76 lines
2.6 KiB

<?php
function main()
{
// 1. 初始化 JVM
echo "=== Step 1: Initialize JVM ===\n";
jni_init(".");
echo "JVM initialized.\n\n";
// ---------------------------------------------------------------
// 2. 动态创建自定义 Hello 对象、调用方法、读写属性
// ---------------------------------------------------------------
echo "=== Step 2: Dynamic Java Object (Hello) ===\n";
// 查找类
$helloClass = jni_find_class("Hello");
echo "Found class: Hello\n";
// 获取方法、属性(反射 + 缓存为 Box 类型)
$greet = jni_find_method($helloClass, "greet");
$nameField = jni_find_field($helloClass, "name");
$ageField = jni_find_field($helloClass, "age");
// 创建对象: Hello(String name, int age)
$hello = jni_new_object($helloClass, ["Swoole", 8]);
echo "Created Hello object.\n";
// 调用方法: String greet(String greeting)
$msg = jni_call($hello, $greet, ["你好"]);
echo "greet() → " . $msg . "\n";
// 读取属性
$name = jni_get($hello, $nameField);
$age = jni_get($hello, $ageField);
echo "name = " . $name . ", age = " . $age . "\n";
// 修改属性
jni_set($hello, $nameField, "PHP");
jni_set($hello, $ageField, 10);
$name2 = jni_get($hello, $nameField);
$age2 = jni_get($hello, $ageField);
echo "After set: name = " . $name2 . ", age = " . $age2 . "\n";
echo "greet() → " . jni_call($hello, $greet, ["Hi"]) . "\n\n";
// ---------------------------------------------------------------
// 3. 使用标准 Java 类 (StringBuilder)
// ---------------------------------------------------------------
echo "=== Step 3: Standard Java Class (StringBuilder) ===\n";
$sbClass = jni_find_class("java.lang.StringBuilder");
echo "Found class: java.lang.StringBuilder\n";
// 获取方法
$append = jni_find_method($sbClass, "append");
$toString = jni_find_method($sbClass, "toString");
// StringBuilder sb = new StringBuilder("Hello");
$sb = jni_new_object($sbClass, ["Hello"]);
echo "Created StringBuilder.\n";
// sb.append(" Java")
$sb2 = jni_call($sb, $append, [" Java"]);
// sb.append(" JNI")
jni_call($sb, $append, [" JNI"]);
// sb.toString()
$str = jni_call($sb, $toString, []);
echo "toString() → " . $str . "\n\n";
// ---------------------------------------------------------------
// 4. 销毁 JVM
// ---------------------------------------------------------------
echo "=== Step 4: Destroy JVM ===\n";
jni_destroy();
echo "JVM destroyed.\n";
}