Zephir是否可以包含外部库?

whi*_*cko 6 php c zephir

我在C中有一些代码可以进行一些硬件访问.此代码已准备就绪并经过充分测试.现在我想实现一个用于控制这个硬件的Web界面.所以我使用Zephir进行了PHP扩展开发.

我的问题是,"Zephir是否可以包含一个外部库.反对它吗?"如果有可能,我该怎么做?

Jen*_*och 8

是的,这是可能的,有两种方法可以使用C代码.

通过将C代码包装在CBLOCK中

您可以在标签中嵌入c代码,如下所示:%{ // c-code }%.

此功能未记录,但存在于测试中.

https://github.com/phalcon/zephir/blob/master/test/cblock.zep https://github.com/phalcon/zephir/blob/c47ebdb71b18f7d8b182f4da4a9c77f734ee9a71/test/cblock.zep#L16 https:// github. COM /尔康/ ZEPHIR/BLOB/c47ebdb71b18f7d8b182f4da4a9c77f734ee9a71 /转/测试/ cblock.c

%{
    // include a header
    #include "headers/functions.h"

    // c implementation of fibonacci
    static long fibonacci(long n) {
        if (n < 2) return n;
        else return fibonacci(n - 2) + fibonacci(n - 1);
    }

}%
Run Code Online (Sandbox Code Playgroud)

看起来有点难看,但工作,)更优雅,但也更多的工作,是自定义优化:

通过编写自定义优化器

"优化器"的工作方式类似于函数调用的拦截器.'优化器'通过直接C调用替换PHP用户空间中函数的调用,这些调用更快并且开销更低,从而提高了性能.

可以使用干净的接口编写优化器,允许Zephir知道传递给C函数的参数类型和返回的数据类型.

手册:https://docs.zephir-lang.com/en/latest/optimizers.html

示例(调用斐波那契c-func):https://github.com/phalcon/zephir/pull/21#issuecomment-26178522

  • 更多的是一个关注社区趋势的全能 PHP 人。尤其是 Phalcon 和 YAF 等面向性能的扩展引起了我的注意。我已将 Phalcon 作为默认扩展添加到我的堆栈中。 (2认同)