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就是你要的結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM