Zend 的 Dmitry Stogov 通过允许 PHP 执行嵌入式 C 代码扩展了 PHP 的领域。 这将允许完全访问本地 C 函数,变量以及数据结构。
解决方案 PHP FFI 作为实验性扩展提供,但要求 PHP 7.3 的开发版本。 该解决方案还不能用于生产,但它构建在的基础之上,使用 FFI(外部函数接口)库 libffi,允许高级语言生成代码。
FFI::__constructor() 有两个参数(都是可选的)。 第一个是 C 声明的集合,第二个是 DSO 库。 由第一个参数定义的所有变量和函数都绑定到 DSO 库中相应的本地符号,然后可以作为FFI对象方法和属性访问。
C 类型的参数,返回值和变量会自动转换为 PHP 类型(如果可能)。 否则,它们被封装在一个特殊的 CData 代理对象中,并可能被元素访问。
在某些情况下(例如,通过指针传递 C 结构),我们可能需要创建一个真正的 C 数据结构。 这可以使用 FFF::new() 方法。 它需要一个 C 类型定义,并且可以重用由 FFI::__constructor() 定义的 C 类型和标签。
FFI 目前的数据结构访问还比较缓慢,比访问原始 PHP 数组和对象的速度慢大约 4 倍。现阶段的速度虽然不太乐观,但还是可以帮助节省内存和资金的。
网友评论 ()条 查看