# Main interface to C code and data

(PHP 7 >= 7.4.0)

## Introduction

Objects of this class are created by the factory methods FFI::cdef(), FFI::load() or FFI::scope(). Defined C variables are made available as properties of the FFI instance, and defined C functions are made available as methods of the FFI instance. Declared C types can be used to create new C data structures using FFI::new() and FFI::type().

FFI definition parsing and shared library loading may take significant time. It is not useful to do it on each HTTP request in a Web environment. However, it is possible to preload FFI definitions and libraries at PHP startup, and to instantiate FFI objects when necessary. Header files may be extended with special `FFI_SCOPE` defines (e.g. `#define FFI_SCOPE "foo"”"`; the default scope is "C") and then loaded by FFI::load() during preloading. This leads to the creation of a persistent binding, that will be available to all the following requests through FFI::scope(). Refer to the complete PHP/FFI/preloading example for details.

It is possible to preload more than one C header file into the same scope.

## Class synopsis

FFI {
/* Methods */
public static addr ( FFI\CData `&$ptr` ) : FFI\CData
public static alignof ( mixed `&$ptr` ) : int
public static arrayType ( FFI\CType `$type` , array `$dims` ) : FFI\CType
public static cast ( mixed `$type` , FFI\CData `&$ptr` ) : FFI\CData
public cast ( mixed `$type` , FFI\CData `&$ptr` ) : FFI\CData
public static cdef ([ string `$code` = "" [, string `$lib` ]] ) : FFI
public static free ( FFI\CData `&$ptr` ) : void
public static isNull ( FFI\CData `&$ptr` ) : bool
public static load ( string `$filename` ) : FFI
public static memcmp ( mixed `&$ptr1` , mixed `&$ptr2` , int `$size` ) : int
public static memcpy ( FFI\CData `&$dst` , mixed `&$src` , int `$size` ) : void
public static memset ( FFI\CData `&$ptr` , int `$ch` , int `$size` ) : void
public static new ( mixed `$type` [, bool `$owned` = `TRUE` [, bool `$persistent` = `FALSE` ]] ) : FFI\CData
public new ( mixed `$type` [, bool `$owned` = `TRUE` [, bool `$persistent` = `FALSE` ]] ) : FFI\CData
public static scope ( string `$scope_name` ) : FFI
public static sizeof ( mixed `&$ptr` ) : int
public static string ( FFI\CData `&$ptr` [, int `$size` ] ) : string
public static type ( mixed `$type` ) : FFI\CType
public type ( mixed `$type` ) : FFI\CType
public static typeof ( FFI\CData `&$ptr` ) : FFI\CType
}

## Table of Contents

- FFI::addr — Creates an unmanaged pointer to C data
- FFI::alignof — Gets the alignment
- FFI::arrayType — Dynamically constructs a new C array type
- FFI::cast — Performs a C type cast
- FFI::cdef — Creates a new FFI object
- FFI::free — Releases an unmanaged data structure
- FFI::isNull — Checks whether a FFI\CData is a null pointer
- FFI::load — Loads C declarations from a C header file
- FFI::memcmp — Compares memory areas
- FFI::memcpy — Copies one memory area to another
- FFI::memset — Fills a memory area
- FFI::new — Creates a C data structure
- FFI::scope — Instantiates an FFI object with C declarations parsed during preloading
- FFI::sizeof — Gets the size of C data or types
- FFI::string — Creates a PHP string from a memory area
- FFI::type — Creates an FFI\CType object from a C declaration
- FFI::typeof — Gets the FFI\CType of FFI\CData