zoukankan      html  css  js  c++  java
  • 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就是你要的结果
  • 相关阅读:
    linux 命令——48 watch (转)
    linux 命令——47 iostat (转)
    linux 命令——46 vmstat(转)
    linux 命令——45 free(转)
    linux 命令——44 top (转)
    linux 命令——43 killall(转)
    linux 命令——42 kill (转)
    linux 命令——41 ps(转)
    linux 命令——40 wc (转)
    Java for LeetCode 068 Text Justification
  • 原文地址:https://www.cnblogs.com/zhb-php/p/5719204.html
Copyright © 2011-2022 走看看