Основний інтерфейс до коду та даних C
(PHP 7 >= 7.4.0, PHP 8)
Вступ
Об'єкти цього класу створюються фабричними методами FFI::cdef() FFI::load() і FFI::scope(). Оголошені змінні C доступні як властивості екземпляра FFI, а функції як його методи. Оголошені типи C можна використовувати для створення структур даних за допомогою FFI::new() і FFI::type()
Розбір оголошень FFI і завантаження бібліотеки, що розділяється, може зайняти значний час. Немає сенсу робити це для кожного HTTP-запиту в оточенні Web. Проте можна перезавантажити оголошення FFI та бібліотеки під час старту PHP та інстанціювати об'єкти FFI за потребою. Заголовні файли можуть бути розширені спеціальними оголошеннями FFI_SCOPE
(наПриклад,#define FFI_SCOPE "foo"
; скоуп за замовчуванням "C") і завантажені за допомогою FFI::load() під час завантаження. Це призведе до створення постійних прив'язок, які будуть доступні для всіх запитів через FFI::scope(). Докладніше читайте на сторінці Прості приклади використання FFI
У той самий скоуп можна завантажити кілька заголовних файлів.
Огляд класів
final
class FFI
{
/* Константы */
public
const
int
__BIGGEST_ALIGNMENT__;
/* Методы */
public static addr(FFI\CData &$ptr): FFI\CData
public static alignof(FFI\CData|FFI\CType &$ptr): int
public static arrayType(FFI\CType $type, array $dimensions): FFI\CType
public static cast(FFI\CType|string $type, FFI\CData|int|float|bool|null &$ptr): ?FFI\CData
public cast(FFI\CType|string $type, FFI\CData|int|float|bool|null &$ptr): ?FFI\CData
public static cdef(string $code = "", ?string $lib = null): FFI
public static free(FFI\CData &$ptr): void
public static isNull(FFI\CData &$ptr): bool
public static load(string $filename): ?FFI
public static memcmp(string|FFI\CData &$ptr1, string|FFI\CData &$ptr2, int $size): int
public static memcpy(FFI\CData &$to, FFI\CData|string &$from, int $size): void
public static memset(FFI\CData &$ptr, int $value, int $size): void
public static new(FFI\CType|string $type, bool $owned = true, bool $persistent = false): ?FFI\CData
public new(FFI\CType|string $type, bool $owned = true, bool $persistent = false): ?FFI\CData
public static scope(string $name): FFI
public static sizeof(FFI\CData|FFI\CType &$ptr): int
public static string(FFI\CData &$ptr, ?int $size = null): string
public static type(string $type): ?FFI\CType
public type(string $type): ?FFI\CType
public static typeof(FFI\CData &$ptr): FFI\CType
}
Обумовлені константи
FFI::__BIGGEST_ALIGNMENT__
Зміст
- FFI::addr— Створює некерований покажчик даних C
- FFI::alignof - Повертає величину вирівнювання
- FFI::arrayType— Динамічно конструює новий тип масиву
- FFI::cast— Здійснює перетворення типу C
- FFI::cdef— Створює новий об'єкт FFI
- FFI::free— Вивільняє некеровану структуру даних
- FFI::isNull— Перевіряє, чи є FFI\CData нульовим покажчиком
- FFI::load— Завантажити декларації C із заголовного файлу
- FFI::memcmp— Порівнює дві області пам'яті
- FFI::memcpy— Копіює вміст однієї області пам'яті в іншу
- FFI::memset— Заповнити область пам'яті
- FFI::new - Створює структуру даних C
- FFI::scope— Інстанціює об'єкт FFI відповідно до декларації С, розібраної на етапі передзавантаження
- FFI::sizeof— Повертає розмір даних або типу C
- FFI::string— Створює рядок PHP із області пам'яті
- FFI::type— Створює об'єкт FFI\CType із декларації С
- FFI::typeof— Отримує FFI\CType для FFI\CData