International PHP Conference Munich 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

Метод создаёт собственную структуру данных заданного типа. Разрешён любой тип, который объявили для экземпляра.

Список параметров

type

type — допустимое объявление типа С в виде строки (string) или экземпляр класса FFI\CType, которые создали заранее.

owned

Создавать ли управляемые или неуправляемые данные. Управляемые данные живут в связке с возвращённым объектом FFI\CData и высвобождаются, когда стандартный подсчёт ссылок PHP или сборщик мусора GC освободят последнюю ссылку на этот объект. Неуправляемые данные необходимо высвобождать вручную методом FFI::free().

persistent

Располагать ли структуру данных C в системной куче (heap) через функцию malloc() или в куче PHP-запроса через функцию emalloc().

Возвращаемые значения

Метод возвращает новый объект класса FFI\CData или null в случае возникновения ошибки.

Список изменений

Версия Описание
8.3.0 Статический вызов метода FFI::new() устарел.

add a note

User Contributed Notes 1 note

up
1
baminazad at cs dot stonybrook dot edu
4 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 equivalent 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