Основной интерфейс к коду и данным C

(PHP 7 >= 7.4.0)

Введение

Объекты этого класса создаются фабричными методами 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.

В один и тот же скоуп можно загрузить несколько заголовочных файлов.

Обзор классов

FFI {
/* Методы */
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|null
public cast (FFI\CType|string $type , FFI\CData|int|float|bool|null &$ptr ): FFI\CData|null
public static cdef (string $code = "" , string|null $lib = null ): FFI
public static free (FFI\CData &$ptr ): void
public static isNull (FFI\CData &$ptr ): bool
public static load (string $filename ): FFI|null
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|null
public new (FFI\CType|string $type , bool $owned = true , bool $persistent = false ): FFI\CData|null
public static scope (string $name ): FFI
public static sizeof (FFI\CData|FFI\CType &$ptr ): int
public static string (FFI\CData &$ptr , int|null $size = null ): string
public static type (string $type ): FFI\CType|null
public type (string $type ): FFI\CType|null
public static typeof (FFI\CData &$ptr ): FFI\CType
}

Содержание

  • 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
add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top