PHP 日本大会 2024

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]
  • 可以使用 foreach 语句迭代 C 数组。
  • C 数组可以作为 count() 函数的参数。
  • C 指针可以像数组一样解引用,例如 $cdata[0]
  • 可以使用常规比较运算符 (<, <=, ==, !=, >=, >) 比较 C 指针。
  • 可以使用常规 +/-/ ++/-- 运算符递增和递减 C 指针,例如 $cdata += 5
  • 可以使用常规 - 运算符从另一个 C 指针中减去 C 指针。
  • C 函数指针可以像常规 PHP 闭包一样调用,例如 $cdata()
  • 可以使用 clone 运算符复制任何 C 数据,例如 $cdata2 = clone $cdata;
  • 可以使用 var_dump(), print_r() 等函数可视化任何 C 数据。
  • 从 PHP 8.3.0 开始,FFI\CData 现在可以赋值给结构体和字段。

注意值得注意的限制是 FFI\CData 实例不支持 isset()empty()unset(),并且包装的 C 结构体和联合体没有实现 Traversable 接口。

类概要

final class FFI\CData {
}

变更日志

版本 描述
8.3.0 FFI\CData 现在可以赋值给结构体和字段。
添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top