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

はじめに

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

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

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

クラス概要

final FFI
/* 定数 */
public const int FFI::__BIGGEST_ALIGNMENT__;
/* メソッド */
public static FFI\CData addr(FFI\CData &$ptr)
public static int alignof(FFI\CDataFFI\CType &$ptr)
public static FFI\CType arrayType(FFI\CType $type, array $dimensions)
public FFI\CDatanull cast(FFI\CTypestring $type, FFI\CDataintfloatboolnull &$ptr)
public static FFI cdef(string $code = "", stringnull $lib = null)
public static void free(FFI\CData &$ptr)
public static bool isNull(FFI\CData &$ptr)
public static FFInull load(string $filename)
public static int memcmp(stringFFI\CData &$ptr1, stringFFI\CData &$ptr2, int $size)
public static void memcpy(FFI\CData &$to, FFI\CDatastring &$from, int $size)
public static void memset(FFI\CData &$ptr, int $value, int $size)
public FFI\CDatanull new(FFI\CTypestring $type, bool $owned = true, bool $persistent = false)
public static FFI scope(string $name)
public static int sizeof(FFI\CDataFFI\CType &$ptr)
public static string string(FFI\CData &$ptr, intnull $size = null)
public FFI\CTypenull type(string $type)
public static FFI\CType typeof(FFI\CData &$ptr)

定義済み定数

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 を取得する