PHP Conference Japan 2024

FFI::cast

(PHP 7 >= 7.4.0, PHP 8)

FFI::cast执行 C 类型转换

描述

public FFI::cast(FFI\CType|string $type, FFI\CData|int|float|bool|null &$ptr): ?FFI\CData

FFI::cast() 创建一个新的 FFI\CData 对象,它引用相同的 C 数据结构,但与不同的类型关联。生成的对象不拥有 C 数据,并且源 ptr 必须在结果之后继续存在。C 类型可以指定为具有任何有效 C 类型声明的 string,或者作为之前创建的 FFI\CType 对象。允许实例声明的任何类型。

参数

type

作为 string 的有效 C 声明,或 FFI\CType 的实例,该实例已创建。

ptr

指向 C 数据结构的指针的句柄。

返回值

返回新创建的 FFI\CData 对象。

变更日志

版本 描述
8.3.0 静态调用 FFI::cast() 现已弃用。

添加注释

用户贡献的注释 1 条注释

-3
Yaner
2 年前
例如,stdlib.h 头文件在 Linux 中定义了一个名为“system()”的函数:extern int system (const char *__command) __wur;
我们可以使用 FFI 扩展来调用它

<?php
$ffi_obj
= FFI::cdef('int system(char *command);')
$ffi_obj->system('whoami');
?>

然后执行 php 脚本,就像我们调用真实的 C `system()` 一样

$ whoami
> root
$ php demo.php
> root
To Top