C のデータハンドル

はじめに

FFI\CData オブジェクトは、通常の PHP データのように様々な方法で使用できます:

  • スカラー型の C のデータは $cdata プロパティを通してアクセスできます。例: $x = FFI::new('int'); $x->cdata = 42;
  • C の構造体や共用体のフィールドは通常の PHP のオブジェクトプロパティのようにアクセスできます。例: $cdata->field
  • C の配列要素は通常の PHP の配列要素のようにアクセスできます。例: $cdata[$offset]
  • C の配列は foreach 文を使って反復できます。
  • C の配列は count の引数として使えます。
  • C のポインタは配列のように参照外しできます。例: $cdata[0]
  • C のポインタは通常の比較演算子を使って比較できます (<<===!=>=>)。
  • C のポインタは通常の +/-/ ++/-- 演算子を使ってインクリメント・デクリメントできます。例: $cdata += 5
  • C のポインタは通常の - 演算子を使って他のポインタと引き算できます。
  • C の関数ポインタは通常の PHP のクロージャのように呼び出せます。例: $cdata()
  • 任意の C のデータは clone 演算子を使って 複製できます。例: $cdata2 = clone $cdata;
  • 任意の C のデータは var_dumpprint_r 等を 使って可視化できます。
  • PHP 8.3.0 以降、FFI\CData は構造体やフィールドに代入できるようになりました。

注意: 特筆すべき制限として、FFI\CData インスタンスは issetemptyunset をサポートしていません。 また、ラップされた C の構造体や共用体は Traversable を実装していません。

クラス概要

final FFI\CData

変更履歴

バージョン 説明
8.3.0 FFI\CData は構造体やフィールドに代入できるようになりました。