美文网首页
PHP7.4新特性FFI初体验

PHP7.4新特性FFI初体验

作者: PFinal南丞 | 来源:发表于2020-05-19 23:04 被阅读0次

PHP7.4正式版发布已经好久了,而主打的新特性是FFI,今天我也来体验一把

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

刚好,有个小需求需要调用c代码来获取命令行窗口的大小(行数和列数)。我们的c代码是:

image

我们先把上面的c代码编译成动态链接库libcli_size.so:

gcc -O2 -fPIC -shared -g cli_size.c -o libcli_size.so

开始写我们的php代码:

首先我们使用FFI::cdef()函数声明我们要调用的这个库中的函数以及使用到的数据类型。

比如我们在这里要调用的三个函数get_cli_rows(获取行数)、 get_cli_cols(获取列数)、 get_size(获取所有信息),我们把他们的声明作为FFI::cdef()函数的第一个参数。看到下面的代码大家应该很熟悉,就是c语言的函数声明。这里get_size方法返回是一个结构体struct winsize,所以我们也要把这个结构体的声明也写上。

FFI::cdef()函数的第二个参数就是我们自己的库文件名了。

image

接下来就是调用了

image

然后运行它:


php cli_size.php

输出:


int(36)     // get_cli_rows()的结果
int(150)    // get_cli_cols()的结果
object(FFI\CData:struct winsize)#2 (4) {    // get_size()的结果,也就是winsize结构体,
  ["ws_row"]=>
  int(36)
  ["ws_col"]=>
  int(150)
  ["ws_xpixel"]=>
  int(1200)
  ["ws_ypixel"]=>
  int(684)
}
int(36)     // get_cli_rows()的结果

通过上面可以看出c语言返回的unsigned short类型在这里变成了php的int, 结构体struct winsize变成了一个FFI\CData对象。

那我们怎么从结构体对象中取某一个属性值呢?

就按普通对象操作就可以了:

输出:

//继续上面的代码
var_dump($ffi->get_size()->ws_row);

输出

int(36)

对于其他的c语言类型,PHP官方文档上都有对应的php类型说明,大家可以去看看。

相关文章

  • PHP7.4新特性FFI初体验

    PHP7.4正式版发布已经好久了,而主打的新特性是FFI,今天我也来体验一把 FFI提供了高级语言直接的互相调用,...

  • PHP7.4新特性FFI初体验

    PHP7.4正式版发布已经好久了,而主打的新特性是FFI,今天我也来体验一把? FFI提供了高级语言直接的互相调用...

  • PHP7.4 ffi

    PHP7.4 引入了 ffi 可直接 调用 c语言,打开了 新世界的大门 ffi实际上很早就能引入,但对于PHP而...

  • php7.4新特性

    php7.4.0已经发布,这是一个船新的版本,记录一下 返回类型限定 类的属性限定 3.** 数组解构**(和js...

  • PHP7.4 部分新特性

    ... 引入数组 类属性声明类型 箭头函数 + - 比 . 优先级别高 mbstring 新函数 mb_str_s...

  • PHP7.4 New Features 新特性

    - Core: . Added support for typed properties. For exampl...

  • Node中通过使用FFI调用外部库文件

    Node中通过使用FFI调用外部库文件 因为NPM上的Sqlite3版本过于低了(3.1.8),有很多新的特性和性...

  • PHP 7.4 早期性能基准测试:与 7.3 差不多

    PHP 7.4 目前正在积极开发中,准备添加到该版本的新特性包括短闭包、自定义对象序列化、FFI(Foreign ...

  • lua生成uuid

    local ffi = require "ffi" ffi.cdef[[ typedef unsigned cha...

  • luajit ffi 使用

    结构定义 首先需要使用ffi.cdef定义需要的结构体,如下: Lua中创建结构对象 使用ffi.new创建新的结...

网友评论

      本文标题:PHP7.4新特性FFI初体验

      本文链接:https://www.haomeiwen.com/subject/edhwohtx.html