# C のコードやデータへの主要インターフェース

(PHP 7 >= 7.4.0, PHP 8)

## はじめに

このクラスのオブジェクトは、ファクトリーメソッドである FFI::cdef() や FFI::load()、FFI::scope() によって作成されます。 定義された C の変数は FFI インスタンスのプロパティとして利用可能となり、 定義された C の関数は FFI インスタンスのメソッドとして利用可能となります。 宣言された C の型は、FFI::new() や FFI::type() を使って 新しい C のデータ構造を作成するのに使用できます。

FFI 定義のパースや共有ライブラリの読み込みには長い時間がかかることがあります。 Web 環境において、各 HTTP リクエストでこれを行うのは不便です。 しかし、FFI 定義やライブラリを PHP の起動時に事前ロードし、FFI オブジェクトを必要なときにインスタンス化することが可能です。 ヘッダーファイルは特殊な define である `FFI_SCOPE` によって拡張することができ (例: `#define FFI_SCOPE "foo"`。デフォルトのスコープは "C" です)、 事前ロード中に FFI::load() によって読み込むことができます。 これによって、永続的なバインディングが作成されます。 こうして作られたバインディングは、FFI::scope() を通じて後続する全リクエストで利用可能となります。 詳しくは PHP/FFI/事前ロードの完全な例 を参照してください。

複数の C のヘッダーファイルを同一のスコープへと事前ロードできます。

## クラス概要

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 — 新しい C の配列型を動的に構築する
- FFI::cast — C の型キャストを実行する
- FFI::cdef — 新しい FFI オブジェクトを作成する
- FFI::free — アンマネージドなデータ構造を解放する
- FFI::isNull — FFI\CData が NULL ポインターかどうかを調べる
- FFI::load — C のヘッダーファイルから C の宣言を読み込む
- FFI::memcmp — メモリ領域を比較する
- FFI::memcpy — あるメモリ領域を別の領域へコピーする
- FFI::memset — メモリ領域を埋める
- FFI::new — C のデータ構造を作成する
- FFI::scope — 事前ロード中にパースされた C の宣言を使って FFI オブジェクトをインスタンス化する
- FFI::sizeof — C のデータサイズまたは C の型サイズを取得する
- FFI::string — メモリ領域から PHP の文字列を作成する
- FFI::type — C の宣言から FFI\CType オブジェクトを作成する
- FFI::typeof — FFI\CData の FFI\CType を取得する

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