# Interfaz principal para el código C y los datos

(PHP 7 >= 7.4.0, PHP 8)

## Introducción

Los objetos de esta clase son creados por los métodos de fábrica FFI::cdef(), FFI::load() o FFI::scope(). Las variables C definidas están disponibles como propiedades de la instancia FFI, y las funciones C definidas están disponibles como métodos de la instancia FFI. Los tipos C declarados pueden ser utilizados para crear nuevas estructuras de datos C utilizando FFI::new() y FFI::type().

El análisis de las definiciones FFI y la carga de las bibliotecas compartidas pueden llevar mucho tiempo. No es útil hacerlo en cada solicitud HTTP en un entorno Web. Sin embargo, es posible precargar las definiciones FFI y las bibliotecas al inicio de PHP, e instanciar los objetos FFI cuando sea necesario. Los archivos de encabezado pueden ser extendidos con definiciones `FFI_SCOPE` especiales (por ejemplo `#define FFI_SCOPE "foo"`; el ámbito por omisión es "C") y luego cargados por FFI::load() durante la precarga. Esto conduce a la creación de una ligadura persistente, que estará disponible para todas las solicitudes siguientes a través de FFI::scope(). Consulte el ejemplo completo PHP/FFI/preloading para más detalles.

Es posible precargar más de un archivo de encabezado C en el mismo ámbito.

## Sinopsis de la Clase

final class FFI {
/* Constantes */
public const int __BIGGEST_ALIGNMENT__;
/* Métodos */
public static function addr(FFI\CData `&$ptr`): FFI\CData
public static function alignof(FFI\CData|FFI\CType `&$ptr`): int
public static function arrayType(FFI\CType `$type`, array `$dimensions`): FFI\CType
public function cast(FFI\CType|string `$type`, FFI\CData|int|float|bool|null `&$ptr`): ?FFI\CData
public static function cdef(string `$code` = "", ?string `$lib` = `null`): FFI
public static function free(FFI\CData `&$ptr`): void
public static function isNull(FFI\CData `&$ptr`): bool
public static function load(string `$filename`): ?FFI
public static function memcmp(string|FFI\CData `&$ptr1`, string|FFI\CData `&$ptr2`, int `$size`): int
public static function memcpy(FFI\CData `&$to`, FFI\CData|string `&$from`, int `$size`): void
public static function memset(FFI\CData `&$ptr`, int `$value`, int `$size`): void
public function new(FFI\CType|string `$type`, bool `$owned` = `true`, bool `$persistent` = `false`): ?FFI\CData
public static function scope(string `$name`): FFI
public static function sizeof(FFI\CData|FFI\CType `&$ptr`): int
public static function string(FFI\CData `&$ptr`, ?int `$size` = `null`): string
public function type(string `$type`): ?FFI\CType
public static function typeof(FFI\CData `&$ptr`): FFI\CType
}

## Constantes predefinidas

`FFI::__BIGGEST_ALIGNMENT__`

## Tabla de contenidos

- FFI::addr — Crea un puntero no gestionado hacia datos C
- FFI::alignof — Recupera el alineamiento
- FFI::arrayType — Construye dinámicamente un nuevo tipo de array C
- FFI::cast — Realiza una conversión de tipo C
- FFI::cdef — Crea un nuevo objeto FFI
- FFI::free — Libera una estructura de datos no gestionada
- FFI::isNull — Verifica si un objeto FFI\CData es un puntero nulo
- FFI::load — Carga las declaraciones C desde un archivo de encabezado C
- FFI::memcmp — Comparación de zonas de memoria
- FFI::memcpy — Copia de una zona de memoria en otra
- FFI::memset — Rellena una zona de memoria
- FFI::new — Crea una estructura de datos C
- FFI::scope — Instancia un objeto FFI con las declaraciones C analizadas durante la precarga
- FFI::sizeof — Recupera el tamaño de los datos o tipos C
- FFI::string — Crea una string PHP a partir de una zona de memoria
- FFI::type — Crea un objeto FFI\CType a partir de una declaración C
- FFI::typeof — Recupera el FFI\CType de FFI\CData

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open