# Interface principale vers le code C et les données

(PHP 7 >= 7.4.0, PHP 8)

## Introduction

Les objets de cette classe sont créés par les méthodes de fabrique FFI::cdef(), FFI::load() ou FFI::scope(). Les variables C définies sont disponibles en tant que propriétés de l'instance FFI, et les fonctions C définies sont disponibles comme méthodes de l'instance FFI. Les types C déclarés peuvent être utilisés pour créer de nouvelles structures de données C en utilisant FFI::new() et FFI::type().

L'analyse des définitions FFI et le chargement des bibliothèques partagées peuvent prendre beaucoup de temps. Il n'est pas utile de le faire à chaque requête HTTP dans un environnement Web. Cependant, il est possible de précharger les définitions FFI et les bibliothèques au démarrage de PHP, et d'instancier les objets FFI lorsque c'est nécessaire. Les fichiers d'en-tête peuvent être étendus avec des définitions `FFI_SCOPE` spéciales (par exemple `#define FFI_SCOPE "foo"`; la portée par défaut est "C") et ensuite chargés par FFI::load() pendant le préchargement. Cela conduit à la création d'une liaison persistante, qui sera disponible pour toutes les requêtes suivantes par l'intermédiaire de FFI::scope(). Reportez-vous à l'exemple complet PHP/FFI/preloading pour plus de détails.

Il est possible de précharger plus d'un fichier d'en-tête C dans la même portée.

## Synopsis de la classe

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

## Constantes pré-définies

`FFI::__BIGGEST_ALIGNMENT__`

## Sommaire

- FFI::addr — Crée un pointeur non géré vers des données C
- FFI::alignof — Récupère l'alignement
- FFI::arrayType — Construit dynamiquement un nouveau type de tableau C
- FFI::cast — Effectue une conversion de type C
- FFI::cdef — Crée un nouvel objet FFI
- FFI::free — Libère une structure de données non gérée
- FFI::isNull — Vérifie si un objet FFI\CData est un pointeur null
- FFI::load — Charge les déclarations C à partir d'un fichier d'en-tête C
- FFI::memcmp — Comparaison des zones de mémoire
- FFI::memcpy — Copie d'une zone de mémoire dans une autre
- FFI::memset — Remplit une zone de mémoire
- FFI::new — Crée une structure de données C
- FFI::scope — Instancie un objet FFI avec les déclarations C analysées lors du préchargement
- FFI::sizeof — Récupère la taille des données ou des types C
- FFI::string — Crée une chaîne PHP à partir d'une zone de mémoire
- FFI::type — Crée un objet FFI\CType à partir d'une déclaration C
- FFI::typeof — Récupère le FFI\CType de FFI\CData