PHP 8.5.0 Released!

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 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 cdef(string $code = "", ?string $lib = null): FFI
public static free(FFI\CData &$ptr): void
public static isNull(FFI\CData &$ptr): bool
public static load(string $filename): ?FFI
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 new(FFI\CType|string $type, bool $owned = true, bool $persistent = false): ?FFI\CData
public static scope(string $name): FFI
public static sizeof(FFI\CData|FFI\CType &$ptr): int
public static string(FFI\CData &$ptr, ?int $size = null): string
public type(string $type): ?FFI\CType
public static 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 を取得する
add a note

User Contributed Notes

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