In PHP 7.4 und oben bietet FFI (Fremdenfunktionsschnittstelle) leistungsstarke Funktionen, um mit der C -Sprache zu interagieren, sodass wir C -Strukturen, Arrays und andere Datentypen direkt manipulieren können. Dieser Artikel konzentriert sich darauf, wie FFI :: Typof verwendet wird, um C -Strukturdaten vom Array -Typ zu erhalten und zu manipulieren.
Ffi :: typeof ist eine von PHP FFI bereitgestellte Methode, um Verweise auf einen C -Sprachtyp zu erhalten. Es akzeptiert einen C -Typ, der durch eine Zeichenfolge dargestellt wird, und gibt ein FFI \ CTYPE -Objekt zurück. Durch dieses Objekt können komplexere Typvorgänge durchgeführt werden, z. B. das Definieren von Variablen, das Erstellen von Arrays usw.
Bequem, um Definitionen der Type wiederzuverwenden und wiederholte Erklärungen zu vermeiden.
Durch Typreferenzen können mehrere Variablen oder Arrays dynamisch erstellt werden.
Unterstützt komplexe Typvorgänge wie verschachtelte Strukturen, Arrays usw.
Angenommen, wir haben eine C -Struktur mit einem Array -Mitglied:
<?php
// Definition C Sprachstruktur
$ffi = FFI::cdef("
typedef struct {
int values[5];
int count;
} IntArrayStruct;
", "https://m66.net");
Hier ist IntarrrayStruct eine Struktur , die Ganzzahlen mit fester Größe enthält [5] und eine Zählerzahl .
<?php
$type = FFI::typeof("IntArrayStruct");
$ type ist jetzt ein Typverweis auf IntarrrayStruct .
<?php
$instance = $type->new();
Auf diese Weise handelt es sich bei $ Instance um eine neu zugewiesene IntarrrayStruct -Instanz.
Array -Werte können direkt über $ Instance-> Werte zugegriffen werden, und der Einweisvorgang wird unterstützt:
<?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";
}
Ausgabe:
values[0] = 0
values[1] = 10
values[2] = 20
values[3] = 30
values[4] = 40
Manchmal müssen wir den Array -Typ direkt manipulieren oder einen Verweis auf den Array -Typ erhalten:
<?php
// Erhalten int[5] Typ
$arrayType = FFI::typeof("int[5]");
// Erstellen Sie eine Array -Variable
$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 ist die Schlüsselschnittstelle zum Erhalten von C -Sprachtypen.
Durch Typreferenz können Sie Instanzen komplexer Datentypen wie Strukturen und Arrays erstellen.
Verwenden Sie zum Betrieb von Array -Mitgliedern in einer Struktur die Standard -Array -Zugriffsmethode.
In Kombination mit PHP -FFI kann die zugrunde liegende C -Datenstruktur flexibel und effizient verarbeitet werden.