当前位置:首页 > 大杂烩 > 正文内容

php ffi是什么?,什么是PHP外部函数接口?

高老师4年前 (2020-10-13)大杂烩1361

许多开发人员在PHP中使用外部函数接口。在这里,我们介绍了它是什么以及如何使用它。

什么是PHP外部函数接口?

PHP外部函数接口(FFI)是PHP 7.4中接口,使开发人员可以使用纯PHP创建扩展和对外部(也称为“外部”)库的绑定。  

他们还可以使用它来调用C函数并访问C数据结构。

为什么PHP外部函数接口很重要?

PHP中的外部函数接口是具有开创性的,因为以前,开发人员只能创建扩展和对外部(也称为“外部”)库的绑定-并使用C语言编写的PHP扩展和绑定来调用C函数并访问C数据结构。能够使用纯PHP完成这些任务:

  • 节省时间。

  • 为PHP开发人员创造了新的机会-例如使在代码中使用机器学习更加容易。

可以节省时间  

能够使用PHP中的此接口直接从PHP代码连接到外部C共享库,从而节省了开发人员时间,因为他们可以最大程度地减少用C编写新的PHP扩展和绑定的需要。 

例如,使用界面,他们可以:

  • 对不具有PHP扩展名的库启用快速原型制作。 

  • 为没有C专业知识并且需要与共享库(包括专有软件中的库)接口的商店提供解决方案。有了足够的PHP专业知识,他们现在可以在内部开发绑定。 

它可以创造新的机会  

PHP中的该接口具有一些有趣的应用程序,这些应用程序可以使用异步PHP(包括Swoole)以及预加载时间长的库,例如机器学习模型。另外,由于该扩展使调用C函数和C数据结构更加容易,因此组织可以在C中开发一段代码来更快地运行CPU密集型工作负载,并使用该接口进行连接。  

如今,PHP社区的领导者正在测试此PHP接口的使用,以支持PHP应用程序中不经常使用的功能。例如:

  • Dmitry Stogov使用Tensorflow编写了FFI的概念证明(以PHP加载是非常困难的。)

  • Remi Collet正在测试Redis绑定

FFI的历史和地位是什么? 

外部函数接口最初在Python和LuaJIT中可用,并且使这些语言对于快速原型制作非常有用。如今,许多语言都具有这种类型的界面。

Dmitry Stogov是PHP的主要核心贡献者之一,也是Perforce员工Zend,他写了PHP FFI。它最初是在PHP 7.4中引入的,仍被认为是实验性的。到2020年,社区可能会在扩展中添加更多功能,并提高其性能。

它会取代PHP扩展吗?

现在说还为时过早,尽管PHP中的此接口不太可能会取代PHP扩展。许多PHP扩展不仅仅是使用PHP数据对象(PDO)绑定到C库。但是,如果外部功能接口的性能达到或更高,则可能会替换更简单的扩展名。在撰写此博客时,几乎在每种情况下,PHP的此接口都比纯C / C ++扩展慢。

如何在PHP中使用外部函数接口

开始在PHP中使用此接口非常简单:

1.创建一个最小的头文件

为要与之绑定的库创建一个最小的头文件。头文件(C中的.h文件)定义了PHP和数据类型将可用的接口。

2.实例化FFI

使用该头文件和/或您要加载的库实例化FFI。 

3.准备数据结构

如果需要,请准备数据结构,然后从要通过FFI实例绑定的库中调用函数,就好像它们是FFI对象的方法一样。 

警告:由于此扩展仍处于试验阶段,并且启用了系统之间的日志级别接口,因此,只有在具有C和代码中C API的高级知识的情况下,才应使用该扩展。您可以使用ffi.enable指令将风险降至最低

了解PHP使用趋势 

所有网站中有将近80%是用PHP编写的。组织正在使用诸如PHP接口和PHP扩展之类的功能来帮助发展其站点并使用现代Web服务实现更大的创新。 

我们对500多家PHP开发人员和商业领袖进行了调查,调查了他们的使用和涉及PHP的战略计划。立即阅读报告。 

本文转载自zend官方blog

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/582.html

分享给朋友:

“php ffi是什么?,什么是PHP外部函数接口?” 的相关文章

c#中string和StringBuilder效率对比

c#中string和StringBuilder效率对比

    c#中string和StringBuilder直接看看执行速度。(2).String类型累计赋值Test               ...

Git本地仓库学习

Git本地仓库学习

1.全局用户信息设置 git  config  --global  user.name  gaojiufeng git  config  --global  user.email  392223903...

Git从远程仓库更新文件

Git从远程仓库更新文件

 git   pull  https://git.oschina.net/392223903/learn.git   master   换为您的git地址...

Git日志查看和版本切换

Git日志查看和版本切换

日志查看:git log版本切换:方式1:git  reset  --hard  HEAD^   倒退一个版本git  reset  --hard  HEAD^^  倒退两个版本方式2:(版本号的形式,建议版本号码补充完...

c#中文简体转换繁体

c#中文简体转换繁体

private const string fantizi = "高久峰是個程序員"; private const string jiantizi = "高久峰是个程序员...

redis安装教程

redis安装教程

1.文件redis-2.6.14.tar.gz的上传 /home/john/创建rdtar文件夹 上传redis-2.6.14.tar.gz至rdtar文件夹  2.解压文件  cd /home/john/rdtar tar &n...