PHP Conference Japan 2024

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

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

返回值

返回新创建的 FFI\CData 对象,或在失败时返回 null

变更日志

版本 描述
8.3.0 现在已弃用以静态方式调用 FFI::new()

添加注释

用户贡献注释 1 条注释

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