PHP 7.4 的 FFI 将支持更好地在 PHP 中使用 C 函数/数据结构

即将在下月底发布的 PHP 7.4 将会引入一个有趣的新功能,那就是期待已久的对 FFI(外部函数接口,Foreign Function Interface)的支持。此功能使得开发者可以在原生 PHP 代码中调用 C 定义的函数/变量/数据结构。

FFI 与预加载功能都将是 PHP 7.4 的重要新功能,FFI 还增强了 PHP FPM systemd 服务、用于 OpenSSL 流的 TLS 1.3 以及许多其他更改。PHP 7.4 的 FFI 甚至可与其他语言的 FFI 实现相媲美。

使用 PHP FFI 应该可以减少为 C 库/程序接口编写新 PHP 模块的需求,因为现在可以使用外部函数接口来完成了。如果你对 PHP 7.4 FFI 的示例代码感到好奇,负责 Fedora/RedHat 的 PHP 打包程序工程师 Remi Collet 撰写了一篇新的博客文章,其中概述了一些带有示例代码的用例。

下面摘录一个简单的例子:

Redis 客户端

目前存在使用 C 或 PHP 编写的 Redis 客户端的各种实现,此示例演示了使用 FFI 来访问 hiredis 库的函数。

  1. 定义库,从库的头文件 hiredis/hredis.h 和 hiredis/read.h 复制/粘贴:preload-redis.h
  2. 对需要预加载的 Remi\Redis 类进行定义:preload-redis.inc
  3. 使用此类的测试脚本:redis.php

输出摘要

$ php74 -d ffi.preload=preload-redis.h -d opcache.preload=preload-redis.inc redis.php
...
+ Remi\Redis::__construct(localhost, 6379)
+ Remi\Redis::initFFI()
+ Remi\Redis::del(foo)
int(1)
+ Remi\Redis::get(foo)
NULL
+ Remi\Redis::set(foo, 2019/10/23 12:45:03)
string(2) "OK"
+ Remi\Redis::get(foo)
string(19) "2019/10/23 12:45:03"
+ Remi\Redis::__destruct

如果希望了解有关 PHP 7.4 FFI 的更多信息,可以查看 PHP.net 上的文档及其基本示例。在发布 PHP 7.4 GA 前估计会经历多个 RC 版本,GA 预计将在 11 月 28 日左右发布。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/110972/ffi-extension-usage-with-php-7-4

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。