FFI::new

(PHP 7 >= 7.4.0, PHP 8)

FFI::new创建 C 数据结构

描述

public FFI::new(FFI\CType|string $type, bool $owned = true, bool $persistent = false): ?FFI\CData

创建给定 C 类型的原生数据结构。任何为实例声明的类型都允许。

参数

type

type 是一个有效的 C 声明,可以是 string 类型,也可以是已经创建的 FFI\CType 实例。

owned

是否创建拥有(即管理)数据或非管理数据。管理数据与返回的 FFI\CData 对象一起存在,并在对该对象的最后一个引用被常规的 PHP 引用计数或 GC 释放时被释放。非管理数据应该在不再需要时通过调用 FFI::free() 来释放。

persistent

是否在系统堆上永久分配 C 数据结构(使用 malloc()),还是在 PHP 请求堆上分配(使用 emalloc())。

返回值

返回新创建的 FFI\CData 对象,如果失败则返回 null

变更日志

版本 描述
8.3.0 现在不推荐静态调用 FFI::new()

添加备注

用户贡献的注释 1 个注释

0
baminazad at cs dot stonybrook dot edu
4 年前
假设我们有一个 C 结构
typedef struct _Z3_ast *Z3_ast;

我们想要创建一个数组
Z3_ast args[2];

并分配值
args[1] = x;
args[1] = y;

PHP FFI 等效项将是
<?php
$ffi
= FFI::cdef(...
// 创建 Z3_ast[2] 类型
$arg_type = FFI::arrayType($ffi->type('Z3_ast'), [2]);
// 创建类型为 Z3_ast[2] 的数组
$args = FFI::new($arg_type);
// 填充数组
$args[0] = $x;
$args[1] = $y;
?>
To Top