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

(PHP 7 >= 7.4.0, PHP 8)

## Введение

Объекты этого класса создаются фабричными методами FFI::cdef(), FFI::load() и FFI::scope(). Объявленные переменные языка C доступны как свойства экземпляра класса FFI, а функции как методы. Методы FFI::new() и FFI::type() принимают или возвращают объявленные типы языка C, когда создают структуры данных C.

Разбор объявлений 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 function addr(FFI\CData `&$ptr`): FFI\CData
public static function alignof(FFI\CData|FFI\CType `&$ptr`): int
public static function arrayType(FFI\CType `$type`, array `$dimensions`): FFI\CType
public function cast(FFI\CType|string `$type`, FFI\CData|int|float|bool|null `&$ptr`): ?FFI\CData
public static function cdef(string `$code` = "", ?string `$lib` = `null`): FFI
public static function free(FFI\CData `&$ptr`): void
public static function isNull(FFI\CData `&$ptr`): bool
public static function load(string `$filename`): ?FFI
public static function memcmp(string|FFI\CData `&$ptr1`, string|FFI\CData `&$ptr2`, int `$size`): int
public static function memcpy(FFI\CData `&$to`, FFI\CData|string `&$from`, int `$size`): void
public static function memset(FFI\CData `&$ptr`, int `$value`, int `$size`): void
public function new(FFI\CType|string `$type`, bool `$owned` = `true`, bool `$persistent` = `false`): ?FFI\CData
public static function scope(string `$name`): FFI
public static function sizeof(FFI\CData|FFI\CType `&$ptr`): int
public static function string(FFI\CData `&$ptr`, ?int `$size` = `null`): string
public function type(string `$type`): ?FFI\CType
public static function 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

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open