# 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(). Se reporter à 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 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 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

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