上一篇文章,我们成功的实现了把一个用户空间的函数传递给创建协程的接口的功能。这一篇文章,我们来介绍一下如何去调用这个用户空间的函数。
我们实现的接口现在变成了:
代码语言:javascript复制PHP_METHOD(study_coroutine_util, create)
{
zend_fcall_info fci = empty_fcall_info;
zend_fcall_info_cache fcc = empty_fcall_info_cache;
zval result;
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_FUNC(fci, fcc)
ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
fci.retval = &result;
if (zend_call_function(&fci, &fcc) != SUCCESS) {
return;
}
*return_value = result;
}
PHP
脚本如下:
<?php
function task()
{
echo "successn";
}
StudyCoroutine::create('task');
执行后,结果如下:
代码语言:javascript复制~/codeDir/cppCode/study # php test.php
success
~/codeDir/cppCode/study #
ok,执行成功了。所以,我们这里的核心就是zend_fcall_info
、zend_fcall_info_cache
和zend_call_function
。下篇文章将会介绍这三个东西。