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]);
}