PHP 7.4 이상에서 FFI (외부 기능 인터페이스)는 C 언어와 상호 작용하는 강력한 기능을 제공하여 C 구조, 어레이 및 기타 데이터 유형을 직접 조작 할 수 있습니다. 이 기사는 FFI :: Typeof를 사용하여 배열 유형의 C 구조 데이터를 얻고 조작하는 방법에 중점을 둘 것입니다.
ffi :: typeof는 php ffi가 C 언어 유형에 대한 참조를 얻기 위해 제공하는 방법입니다. 문자열로 표시되는 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();
이러한 방식으로 $ instance는 새로 할당 된 Intarraystruct 인스턴스입니다.
배열 값은 $ instance-> 값을 통해 직접 액세스 할 수 있으며 첨자 작업이 지원됩니다.
<?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 데이터 구조는 유연하고 효율적으로 처리 될 수 있습니다.