php扩展开发---回调php方法-call_user_function

php version:5.6.22
mac


php

$obj = new xing_http_server();
$obj->on(1,function($server){
    echo "http server is started at http://127.0.0.1:9501\n";
    echo $server;
});

c

PHP_METHOD(xing_http_server, on)
{
//    php_printf("this is on");
    zval *callback;
    zval *event_name;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &event_name, &callback) == FAILURE)
    {
        php_printf("failure");
    }

    //判断callback是不是回调方法
    char *func_name = NULL;
    if (!zend_is_callable(callback, 0,&func_name TSRMLS_CC))
    {
        php_error_docref(NULL TSRMLS_CC,E_ERROR, "function '%s' is not callable", func_name);
        efree(func_name);
        RETURN_FALSE;
    }
    efree(func_name);
    //回调方法参数赋值
    zval *args[1];
    MAKE_STD_ZVAL(args[0]);
    ZVAL_LONG(args[0], 1);

    if (call_user_function(EG(function_table), NULL, callback, return_value, 1, args TSRMLS_CC) != SUCCESS)
    {
        php_printf("callback faild");
        RETURN_FALSE;
    }
    zval_ptr_dtor(&args[0]);


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值