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.
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.
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.
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 .
<?php
$type = FFI::typeof("IntArrayStruct");
$ type est désormais une référence de type à IntArraystruct .
<?php
$instance = $type->new();
De cette façon, $ instance est une instance IntArrayStructe nouvellement allouée.
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;
<?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
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";
}
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.