php扩展函数调用扩展中的标准函数

这几天在写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就是你要的结果

时间: 2024-08-20 03:30:32

php扩展函数调用扩展中的标准函数的相关文章

Visual Studio扩展与更新中插件被禁用,安装后无法使用

在Visual Studio中的扩展与更新中安装插件后,显示[禁用],重新安装后仍然不能使用,但是VS默认安装的扩展却可以正常使用. 这里需要注意下方显示“当前不允许加载每用户扩展”,点击“启用每用户拓展的加载”,显示如下窗体: 勾选以管理员身份加载每用户扩展,然后重新启动VS,问题解决.

ES6 - 数组扩展(扩展运算符)

扩展运算符 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算(函数),将一个数组转为用逗号分隔的参数序列. rest: 变量将多余的参数放入数组中. spread(扩展):rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. 总结:二者为逆操作. console.log(...[1, 2, 3]) // 1 2 3 该运算符主要用于函数调用. /** * 1.该运算符将一个数组,变为参数序列. */ function add(x, ...y) { // x =

全栈JavaScript之路(十五)HTML5 focus 扩展 (焦点扩展)

HTML5 添加了辅助管理 focus 的功能,  文档获得焦点的途径有; 页面加载,用户输入(一般是按tab键),和 在代码中调用focus()函数. HTML5新增的辅助管理焦点的属性与方法有: document.activeElement 属性, 这个属性指向获得焦点的元素,文档加载期间 值为null, 文档加载完成,保存得是  document.body 的引用. document.hasFocus()方法, 确定文档是否获得了焦点. 查询文档获知哪个元素获得了焦点,以及确定文档是否获得

同余|欧拉定理|费马小定理|扩展欧拉定理|扩展欧几里得算法

目录 同余 基本定理 欧拉定理 费马小定理 扩展欧拉定理 扩展欧几里得算法 同余 基本定理 欧拉定理 若a,m互质,则 \[ a^{\varphi\left ( m \right )}\equiv 1\left ( mod \ m \right ) \] 应用 令,,这两个数是互素的.比5小的正整数中与5互素的数有1.2.3和4,所以.计算:,而.与定理结果相符. 计算的个位数,实际是求被10除的余数.7和10互素,且.由欧拉定理知.所以. 费马小定理 若p是质数,则对于任意整数a,都有 \[

ARM系统中函数调用过程中的参数传递-转

在 嵌入式软件编程中,经常会用到函数调用,之前在学习如何在C语言中嵌入汇编时有了解到C语言之前的参数调用是使用寄存器R0传递第一个参数,R1传递到第 二个..一直到R3传递第四个参数.但是实际上有时可能传递的参数非常多,超过8个,或是参数中有浮点数之类,参数也会超过4个寄存器,对于超出的部份并 不使用R4,而是使用堆栈的方式,但具体是如何的方式很多网站就没了下文了. 对于ARM体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedur

[转]Swift中的标准函数

本文转自cocoaChina,原文链接:点这里 Swift中的标准函数 本文将列举Swift所有的内建函数.本文中提到的所谓的内建函数是指那些在Swift中不需要导入任何模块(如Foundation等)或者引用任何类就可以使用的函数. Swift中共有74个内建函数,但是在Swift官方文档(“The Swift Programming Language”)中只记录了7中.剩下的67个都没有记录. 本文将列举Swift所有的内建函数.本文中提到的所谓的内建函数是指那些在Swift中不需要导入任何

Swift2.0语言教程之Swift2.0语言中的标准函数

Swift2.0语言教程之Swift2.0语言中的标准函数 Swift2.0中的标准函数 函数除了可以根据参数列表的有无分为无参函数和有参函数,还可以从定义角度分为用户自定义函数和标准函数两种.以上的示例都是用户自定函数.Swift提供了74个标准函数,这些函数都可以直接去使用,不需要进行定义.本节将针对常用的标准函数进行详细的讲解. Swift2.0中的绝对值函数abs() abs()函数的功能是求数值的绝对值.其语法形式如下: abs(数值) 函数的返回值是一个零或者正数. [示例7-17]

DICOM:参考dcm4che2扩展fo-dicom(mDCM)中的UserIdentity字段

背景: 5月份的前半段好懒惰,手里积攒了好多篇文章,也有之前答应过博友要写的,迟迟未动笔.究其根源,有些许懒惰,但更多的是迷惑和一知半解,虽想写但却不知如何入手,零星的感悟要积累成文还是需要时间去沉淀的,以期尽量做到每篇博文有理有据. 今天正好借着手头新任务的机会,介绍一下DICOM3.0标准中的又一新内容.继之前两篇博文基于JMeter+dcm4che2测试PACS服务器性能的解决方案(前/续篇)中提到的DICOM标准第15部分中的TransferCapability概念,本篇介绍标准第8部分

参考dcm4che2扩展fo-dicom(mDCM)中的UserIdentity字段

5月份的前半段好懒惰,手里积攒了好多篇文章,也有之前答应过博友要写的,迟迟未动笔.究其根源,有些许懒惰,但更多的是迷惑和一知半解,虽想写但却不知如何入手,零星的感悟要积累成文还是需要时间去沉淀的,以期尽量做到每篇博文有理有据. 今天正好借着手头新任务介绍DICOM标准中的又一新内容,参照dcm4che2工具扩展fo-dicom(mDCM)向A-ASSOCIATE-RQ PDU中添加UserIdentity....yuedu.baidu.com/album/view/a9e914106c175f0