函数名:FFI::cast() 适用版本:PHP 7.4.0 及以上版本
用法: FFI::cast() 函数用于将指针转换为不同类型的指针。
语法: FFI::cast(string $type, mixed $ptr): mixed
参数:
- $type:要转换的目标类型,可以是 C 原生类型、结构体或联合体。
- $ptr:要转换的指针。
返回值: 返回一个指向指定类型的指针。
示例:
<?php
// 定义 C 结构体
$ffi = FFI::cdef("
typedef struct {
int x;
int y;
} Point;
", "libc.so.6");
// 分配内存并获取指针
$ptr = $ffi->new("Point");
$ptr->x = 10;
$ptr->y = 20;
// 将指针转换为不同类型的指针
$ptr2 = FFI::cast("int*", $ptr);
// 修改转换后的指针的值
$ptr2[0] = 30;
// 打印原始指针和转换后的指针的值
echo $ptr->x; // 输出 30
echo $ptr->y; // 输出 20
上述示例中,我们首先定义了一个 C 结构体 Point,然后使用 FFI 扩展创建了一个指向该结构体的指针 $ptr,并将其 x 和 y 成员的值分别设置为 10 和 20。然后,我们使用 FFI::cast() 将该指针转换为 int* 类型的指针 $ptr2,并将其值修改为 30。最后,我们打印原始指针和转换后的指针的值,可以看到原始指针的 x 成员的值也被修改为 30,证明了指针转换的成功。 ```