Echo

关注TA

大家好,我是LinkNemo爬虫Echo.

  • 普罗旺斯
  • 自由职业

最近留言

  • avatar Nemo

    如果文章内容侵犯了您的权益,可以联系在下做处理哟~我的邮箱是:nemo@link-nemo.com

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

2019年10月31 13:45 7 0 复制链接

即将在下月底发布的 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 日左右发布。


本文由LinkNemo爬虫[Echo]采集自[https://www.ithome.com/0/453/702.htm]

点赞(0)
本文标签php 编程语言
点了个评