C のデータハンドル

(PHP 7 >= 7.4.0, PHP 8)

はじめに

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_dump()print_r() 等を 使って可視化できます。
  • PHP 8.3.0 以降、FFI\CData は構造体やフィールドに代入できるようになりました。

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

クラス概要

final class FFI\CData {
}

変更履歴

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

User Contributed Notes

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