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 是一個有效的 C 宣告,可以是 字串 型態,或是已經建立的 FFI\CType 實例。

owned(擁有權)

是否建立擁有權(即受管理)或非受管理的資料。受管理的資料與返回的 FFI\CData 物件一起存在,並在透過一般 PHP 引用計數或 GC 釋放對該物件的最後一個引用時釋放。非受管理的資料應在不再需要時,透過呼叫 FFI::free() 釋放。

persistent(持久性)

是否將 C 資料結構永久分配在系統堆積上(使用 malloc()),或是在 PHP 請求堆積上(使用 emalloc())。

返回值

返回新建立的 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