× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

Coroutine::getPcid

获取当前协程的父ID

需要v4.3.0及以上

API

function Coroutine::getPcid([$cid]) : int

参数缺省, 可传入某个协程的id以获取它的父id, 默认为当前协程

例子

var_dump(Co::getPcid());
go(function () {
    var_dump(Co::getPcid());
    go(function () {
        var_dump(Co::getPcid());
        go(function () {
            var_dump(Co::getPcid());
            go(function () {
                var_dump(Co::getPcid());
            });
            go(function () {
                var_dump(Co::getPcid());
            });
            go(function () {
                var_dump(Co::getPcid());
            });
        });
        var_dump(Co::getPcid());
    });
    var_dump(Co::getPcid());
});
var_dump(Co::getPcid());

输出

非嵌套协程调用getPcid将返回-1 (从非协程空间创建的)

在非协程内调用getPcid将返回false (没有父协程)

0作为保留id, 不会出现在返回值中

bool(false)
int(-1)
int(1)
int(2)
int(3)
int(3)
int(3)
int(1)
int(-1)
bool(false)

注意

协程之间并没有实质上的持续父子关系, 协程之间是相互隔离, 独立运作的 此Pcid可理解为创建了当前协程的协程id

用途

串联多个协程调用栈

go(function () {
    go(function () {
        $ptrace = Co::getBackTrace(Co::getPcid());
        // balababala
        var_dump(array_merge($ptrace, Co::getBackTrace(Co::getCid())));
    });
});

Implemented in: A B


  • 在非协程环境下调用返回false

  • 版本4.4.2在非协程环境下调用返回false

  • 对方正在输入中...

    Coroutine::create返回的协程id与Coroutine::getPcid获取的协程id怎么不一致