Основний інтерфейс до коду та даних 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