Position actuelle: Accueil> Derniers articles> Explication détaillée de FFI :: Typeof Utilisation: Comment obtenir et manipuler les données de structure C du type de tableau?

Explication détaillée de FFI :: Typeof Utilisation: Comment obtenir et manipuler les données de structure C du type de tableau?

M66 2025-06-22

Dans PHP 7.4 et plus, FFI (Interface de fonction étrangère) fournit des capacités puissantes pour interagir avec le langage C, nous permettant de manipuler directement les structures C, les tableaux et autres types de données. Cet article se concentrera sur la façon d'utiliser FFI :: TypeOf pour obtenir et manipuler les données de structure C du type de tableau.


1. Qu'est-ce que FFI :: typeof?

FFI :: TypeOf est une méthode fournie par PHP FFI pour obtenir des références à un type de langue C. Il accepte un type C représenté par une chaîne et renvoie un objet FFI \ ctype . Grâce à cet objet, des opérations de type plus complexes peuvent être effectuées, telles que la définition des variables, la création de tableaux, etc.


2. Pourquoi utiliser ffi :: typeof?

  • Pratique de réutiliser les définitions de type et d'éviter les déclarations répétées.

  • Grâce à des références de type, plusieurs variables ou tableaux peuvent être créés dynamiquement.

  • Prend en charge les opérations de type complexe, telles que les structures imbriquées, les tableaux, etc.


3. Exemple: obtenir et manipuler les données de structure C du type de tableau

Supposons que nous ayons une structure C contenant un membre du tableau:

 <?php
// définition C Structure linguistique
$ffi = FFI::cdef("
typedef struct {
    int values[5];
    int count;
} IntArrayStruct;
", "https://m66.net");

Ici, IntArraystruct est une structure contenant des valeurs de tableau entier de taille fixe [5] et un comptoir .


1. Utilisez ffi :: typeof pour obtenir le type de structure

 <?php
$type = FFI::typeof("IntArrayStruct");

$ type est désormais une référence de type à IntArraystruct .


2. Créez une instance de structure

 <?php
$instance = $type->new();

De cette façon, $ instance est une instance IntArrayStructe nouvellement allouée.


3. Accès et modifier les membres de la table

Les valeurs du tableau sont accessibles directement via $ instance-> valeurs , et l'opération des indices est prise en charge:

 <?php
for ($i = 0; $i < 5; $i++) {
    $instance->values[$i] = $i * 10;
}
$instance->count = 5;

4. Itérer sur les membres de la gamme

 <?php
for ($i = 0; $i < $instance->count; $i++) {
    echo "values[$i] = " . $instance->values[$i] . "\n";
}

Sortir:

 values[0] = 0
values[1] = 10
values[2] = 20
values[3] = 30
values[4] = 40

4. Exemple: type de tableau d'opérande lui-même

Parfois, nous devons manipuler directement le type de tableau ou obtenir une référence au type de tableau:

 <?php
// Obtenir int[5] taper
$arrayType = FFI::typeof("int[5]");

// Créer une variable de tableau
$arrayInstance = $arrayType->new();

for ($i = 0; $i < 5; $i++) {
    $arrayInstance[$i] = $i + 1;
}

for ($i = 0; $i < 5; $i++) {
    echo $arrayInstance[$i] . "\n";
}

5. Résumé

  • Ffi :: typeof est l'interface clé pour obtenir des types de langage C.

  • Grâce à la référence de type, vous pouvez créer des instances de types de données complexes tels que les structures et les tableaux.

  • Pour faire fonctionner les membres de la baie dans une structure, utilisez la méthode d'accès standard.

  • Combinée à PHP FFI, la structure de données C sous-jacente peut être traitée de manière flexible et efficace.