PHP 7.4以降では、FFI(外部関数インターフェイス)がC言語と相互作用する強力な機能を提供し、C構造、アレイ、その他のデータ型を直接操作できるようにします。この記事では、FFI :: TYPEOFを使用して、配列タイプのC構造データを取得および操作する方法に焦点を当てます。
FFI :: Typeofは、 C言語タイプへの参照を取得するためのPHP FFIによって提供される方法です。文字列で表されるcタイプを受け入れ、 ffi \ ctypeオブジェクトを返します。このオブジェクトを介して、変数の定義、配列の作成など、より複雑なタイプ操作を実行できます。
タイプの定義を再利用し、繰り返しの宣言を避けるのに便利です。
タイプ参照により、複数の変数または配列を動的に作成できます。
ネストされた構造、アレイなど、複雑なタイプの操作をサポートします。
配列メンバーを含むC構造があるとします。
<?php
// 意味 C 言語構造
$ffi = FFI::cdef("
typedef struct {
int values[5];
int count;
} IntArrayStruct;
", "https://m66.net");
ここでは、 intarrayStructは、固定サイズの整数アレイ値[5]とカウンターカウントを含む構造です。
<?php
$type = FFI::typeof("IntArrayStruct");
$タイプは、 intarrayStructへのタイプ参照になりました。
<?php
$instance = $type->new();
このように、 $インスタンスは新しく割り当てられたintarrayStructインスタンスです。
配列値は、 $ instance-> valuesを介して直接アクセスでき、サブスクリプト操作がサポートされています。
<?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";
}
出力:
values[0] = 0
values[1] = 10
values[2] = 20
values[3] = 30
values[4] = 40
アレイタイプを直接操作するか、配列タイプへの参照を取得する必要がある場合があります。
<?php
// 得る int[5] タイプ
$arrayType = FFI::typeof("int[5]");
// 配列変数を作成します
$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は、 C言語タイプを取得するための重要なインターフェイスです。
タイプリファレンスを介して、構造や配列などの複雑なデータ型のインスタンスを作成できます。
構造内の配列メンバーを操作するには、標準の配列アクセス方法を使用します。
PHP FFIと組み合わせて、基礎となるCデータ構造は柔軟かつ効率的に処理できます。