前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手撸PHP扩展 0x07: 协程创建(三)

手把手撸PHP扩展 0x07: 协程创建(三)

作者头像
桶哥
发布2019-07-24 22:03:33
4110
发布2019-07-24 22:03:33
举报
文章被收录于专栏:PHP饭米粒PHP饭米粒

上一篇文章,我们成功的实现了把一个用户空间的函数传递给创建协程的接口的功能。这一篇文章,我们来介绍一下如何去调用这个用户空间的函数。

我们实现的接口现在变成了:

代码语言: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脚本如下:

代码语言:javascript
复制
<?php

function task()
{
	echo "success\n";
}

Study\Coroutine::create('task');

执行后,结果如下:

代码语言:javascript
复制
~/codeDir/cppCode/study # php test.php
success
~/codeDir/cppCode/study # 

ok,执行成功了。所以,我们这里的核心就是zend_fcall_infozend_fcall_info_cachezend_call_function。下篇文章将会介绍这三个东西。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHP饭米粒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档