博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php扩展函数调用扩展中的标准函数
阅读量:6644 次
发布时间:2019-06-25

本文共 1189 字,大约阅读时间需要 3 分钟。

这几天在写php的扩展函数,在网上学习步骤什么的都有,一般问题也都能查到,所以就不再此啰嗦,写这篇博客的原因是因为遇到的一个问题,百度谷歌都没找到,对于初学者,这个或许有用,对于过来人,我想他们肯定也遇到过,所以想想还是写出来吧。
问题:在php的扩展中想调用c已经写好的东西,但是不知道怎么调用,此处想调用的是standard中的标准函数
 
首先把要调用的标准库的头文件include 进来
如:#include "ext/standard/php_rand.h"  把随机数的头文件加载进来
 
我们只能调用php_rand.h 头文件声明的PHPAPI函数,如php_rand.h中声明的这些函数:
 
PHPAPI void php_srand(long seed TSRMLS_DC);
PHPAPI long php_rand(TSRMLS_D);
PHPAPI void php_mt_srand(php_uint32 seed TSRMLS_DC);
PHPAPI php_uint32 php_mt_rand(TSRMLS_D);
 
这些函数的具体代码在rand.c中都可以找到,调用这些标准函数的参数大概也可以知道,如果还是不清楚,参数代表的是什么,还有一个办法,就是查看别的函数是如何调用的,仿照它传参就行。如:我想调用php_rand函数,但是我不清楚它那个参数是什么意思,在rand.c中搜索调用它的函数,可以找到如下代码段:
 
PHP_FUNCTION(rand)
{
    long min;
    long max;
    long number;
    int  argc = ZEND_NUM_ARGS();
 
    if (argc != 0 && zend_parse_parameters(argc TSRMLS_CC, "ll", &min, &max) == FAILURE)
        return;
 
    number = php_rand(TSRMLS_C);  
//这就是调用的例子,仿照这个进行调用
    if (argc == 2) {
        RAND_RANGE(number, min, max, PHP_RAND_MAX);
    }
 
    RETURN_LONG(number);
}
 
TSRMLS_C代表线程安全,可以直接使用,所以用的时候照着那个传就行。如果参数是别的,你就找参数的来源,在源文件中搜索或者参数是php调用的时候传的,总之可以找到参数的意义,你就可以使用了。
 
然后在你的扩展代码 .c文件中
#include "ext/standard/php_rand.h" 
代码中正常调用函数:
int number = php_rand(TSRMLS_C);
 
返回的number就是你要的结果

转载于:https://www.cnblogs.com/zhb-php/p/5719204.html

你可能感兴趣的文章
Android系统定制之SystemUI修改:下拉通知栏尺寸【转】
查看>>
pycharm最新版新建工程没导入本地包问题:module 'selenium.webdriver' has no attribute 'Firefox'...
查看>>
dispatch_sync
查看>>
tomcat启动时出现了Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
查看>>
Apollo 1 融合 Spring 的三个入口
查看>>
CentOS 7 安装 Jenkins
查看>>
c# 串口SerialPort
查看>>
mysql 启动和关闭外键约束
查看>>
Unity4 升级到 Unity5 更新小记
查看>>
JFinal项目部署到Weblogic注意事项
查看>>
rdlc 分页操作和分页统计
查看>>
黄聪:JS数学计算精度修正
查看>>
使用windeployqt工具来进行Qt的打包发布
查看>>
Redis哨兵
查看>>
所谓 A/B test
查看>>
TCP握手和传输的一次观察
查看>>
CentOS下使用LVM进行分区(转)
查看>>
第六章:任务执行——Java并发编程实战
查看>>
git如何打补丁?
查看>>
如何唯一确定一个 Java 类?
查看>>