PHP FFI详解 - 一种全新的PHP扩展方式 (www.laruence.com)

【简介】

随着PHP7.4而来的有一个我认为非常有用的一个扩展:PHP FFI(Foreign Function interface), 引用一段PHP FFI RFC中的一段描述:For PHP, FFI opens a way to write PHP extensions and bindings to C libraries in pure PHP.

是的,FFI提供了高级语言直接的互相调用,而对于PHP来说,FFI让我们可以方便的调用C语言写的各种库。

其实现有大量的PHP扩展是对一些已有的C库的包装,比如常用的mysqli, curl, gettext等,PECL中也有大量的类似扩展。

传统的方式,当我们需要用一些已有的C语言的库的能力的时候,我们需要用C语言写wrapper,把他们包装成扩展,这个过程中就需要大家去学习PHP的扩展怎么写,当然现在也有一些方便的方式,比如Zephir. 但总还是有一些学习成本的,而有了FFI以后,我们就可以直接在PHP脚本中调用C语言写的库中的函数了。

而C语言几十年的历史中,积累了大量的优秀的库,FFI直接让我们可以方便的享受这个庞大的资源了。

点击查看全文 >>

@技术头条 2021-05-28 08:32分享 / 原作者微博:@Laruence / 0个评论
赞过的人: @IT技术博客大学习
要不要再学学下面的文章?
为 Python 写一个 C++ 扩展模块 (linux.cn)
在本文中,我将向你展示如何编写一个 C++ 扩展模块。使用 C++ 而不是 C,因为大多数编译器通常都能理解这两种语言。我必须提前说明缺点:以这种方式构建的 Python 模块不能移植到其他解释器中。它们只与 CPython 解释器配合工作。因此,如果你正在寻找一种可移植性更好的与 C 语言模块交互的方式,考虑下使用 ctypes 模块。
by @技术头条 2023-01-04 23:40 分享 查看详情
Nginx 黑魔法:使用 NGX-PHP 模块低成本实现高性能应用 (soulteary.com)
本篇文章分享一个和 Nginx 以及 PHP 有关的“黑魔法”:NGX-PHP 模块。通过这个方式,我们可以低成本的实现高性能应用,以及适合在服务器资源有限的情况下,同时体验到 Nginx 的高效以及 PHP 的灵活。如果你对 PHP 的印象还停留在“慢”,那么或许这篇文章可以帮助你打开新世界。
by @技术头条 2022-12-18 20:46 分享 查看详情
一文详解BERT模型实现NER命名实体抽取-王文广 (www.52nlp.cn)
在自然语言处理和知识图谱中,实体抽取、NER是一个基本任务,也是产业化应用NLP 和知识图谱的关键技术之一。BERT是一个大规模预训练模型,它通过精心设计的掩码语言模型(Masked Language Model,MLM)来模拟人类对语言的认知,并对数十亿个词所组成的语料进行预训练而形成强大的基础语义,形成了效果卓绝的模型。通过 BERT来进行实体抽取、NER的方法是当前在NLP和知识图谱的产业化应用中最常用的方法,是效果与成本权衡下的最佳选择。本文详细讲解使用BERT来进行实体抽取,看完本文就会用当前工业界最佳的模型了。
by @技术头条 2022-12-18 20:06 分享 查看详情
向量数据库入坑:传统文本检索方式的降维打击,使用 Faiss 实现向量语义检索 (soulteary.com)
在上一篇文章[《聊聊来自元宇宙大厂 Meta 的相似度检索技术 Faiss》]中,我们有聊到如何快速入门向量检索技术,借助 Meta AI(Facebook Research)出品的 faiss 实现“最基础的文本内容相似度检索工具”,初步接触到了“语义检索”这种对于传统文本检索方式具备“降维打击”的新兴技术手段。有朋友在聊天中提到,希望能够聊点更具体的,比如基于向量技术实现的语义检索到底比传统文本检索强多少,以及是否有局限性,能不能和市场上大家熟悉的技术产品进行一个简单对比。那么,本篇文章就试着从这个角度来聊聊。
by @技术头条 2022-09-12 22:39 分享 查看详情
与日俱进,在 Go 1.20 中这种高效转换的方式又变了 (colobu.com)
在 Go 1.19 的开发中, string.SliceHeader和string.StringHeader经历了一个生死存亡的争斗,这两个类型一度被标记为弃用(deprecated),但是这两个类型经常用在 slice of byte 和 string 高效互转的场景中,如果被标记为弃用,但是目前还没有可替代的方法,所以这两个类型又把弃用标记去掉了,如无意外,它们也会在 Go 1.20 再次被标记为弃用。
by @技术头条 2022-09-12 22:38 分享 查看详情
如何继承自定义元素及其他JS中扩展新方法 (www.zhangxinxu.com)

相似内核但语义不同的Web组件该如何更高效的组织代码才能兼顾可维护性和可阅读性呢?如何在任意位置对已由的自定义元素组件进行方法或属性的扩展呢?一点实战经验分享,希望可以帮到大家的工作。

by @技术头条 2022-08-31 23:08 分享 查看详情
详解日后定会大规模使用的CSS @layer 规则 (www.zhangxinxu.com)

话就放在这里了,不出三年,CSS @layer 规则一定会在业界遍地开花,到处使用。
by @技术头条 2022-08-18 23:36 分享 查看详情
Spring注入Bean的七种方式 (mp.weixin.qq.com)
我们谈到Spring的时候一定会提到IOC容器、DI依赖注入,Spring通过将一个个类标注为Bean的方法注入到IOC容器中,达到了控制反转的效果。那么我们刚开始接触Bean的时候,一定是使用xml文件,一个一个的注入,就例如下面这样。
by @code小生 2022-08-07 09:41 分享 查看详情
Python的list列表详解 (www.ipcpu.com)
Python list(列表),是Python中最常用的一种数据结构,它是一组用方括号括起来、逗号分隔的数据。 列表的元素可以是任何类型的,但使用时通常各个元素的类型是相同的。 列表支持加入不同数据类型的元素:数字、字符串、列表、元组等。 列表是可变的,因此即使在创建后也可以对其进行更改。 Python中的列表是有序的,并且有一定数量。 根据确定的序列对列表中的元素进行索引,并使用0作为第一个索引来完成列表的索引。
by @技术头条 2022-07-24 20:59 分享 查看详情
使用容器方式编译无功能限制的 Drone CI (soulteary.com)
因为默认版本的 Drone 包含构建次数限制,如果日常高频使用 Drone,不久之后,便会遇到需要“重新初始化”应用才能继续使用的问题,但其实,作为个人用户,我们其实可以不受此限制影响。所以本篇文章,就来分享下如何使用容器方式构建无使用限制的 Drone CI。
by @技术头条 2022-07-24 20:56 分享 查看详情