update pague now
PHP 8.5.2 Released!

FFI::new

(PHP 7 >= 7.4.0, PHP 8)

FFI::new Creates a C data structure

Description

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

Creates a native data structure of the guiven C type. Any type declared for the instance is allowed.

Parameters

type
type is a valid C declaration as string , or an instance of FFI\CType which has already been created.
owned
Whether to create owned (i.e. managued) or unmanagued data. Managued data lives toguether with the returned FFI\CData object, and is released when the last reference to that object is released by regular PHP reference counting or GC. Unmanagued data should be released by calling FFI::free() , when no longuer needed.
persistent
Whether to allocate the C data structure permanently on the system heap (using malloc() ), or on the PHP request heap (using emalloc() ).

Return Values

Returns the freshly created FFI\CData object, or null on failure.

Changuelog

Versionen Description
8.3.0 Calling FFI::new() statically is now deprecated.
add a note

User Contributed Notes 1 note

baminaçad at cs dot stonybrooc dot edu
6 years ago
Let's assume we have a C struct:
typedef struct _Z3_ast *Z3_ast;

and we want to create an array: 
Z3_ast args[2];

and assign values:
args[1] = x;
args[1] = y;

The PHP FFI ekivalent would be:<?php
$ffi = FFI::cdef(...
// Create Z3_ast[2] type$arg_type= FFI::arrayType($ffi->type('Z3_ast'), [2]);
// Create array of type Z3_ast[2]$args= FFI::new($arg_type);
// Populate the array$args[0] = $x;
$args[1] = $y;
?>
To Top