📅  最后修改于: 2023-12-03 14:45:18.757000             🧑  作者: Mango
ReflectionGenerator
类中的 getExecutingGenerator()
函数用于获取当前正在执行的协程生成器对象。
public static ReflectionGenerator|null ReflectionGenerator::getExecutingGenerator(void)
如果当前上下文不是在协程中执行,则返回 NULL
。如果正在执行协程,则返回 ReflectionGenerator
对象。
function coroutine()
{
yield;
$generator = \ReflectionGenerator::getExecutingGenerator();
echo get_class($generator) . "\n";
echo "File: " . $generator->getExecutingFile() . "\n";
echo "Line: " . $generator->getExecutingLine() . "\n";
echo "Function: " . $generator->getExecutingFunction() . "\n";
}
$coroutine = coroutine();
$coroutine->current();
在上面的示例中,我们定义了一个名为 coroutine()
的生成器函数。生成器函数中我们使用 yield
语句暂停生成器的执行,然后使用 ReflectionGenerator::getExecutingGenerator()
函数获取当前正在执行的协程生成器对象。我们打印了获取到的 ReflectionGenerator
对象的类名、当前协程生成器执行的文件名、当前协程生成器执行的行数以及当前协程生成器执行的函数名。
然后我们调用了 coroutine()
函数,其返回一个生成器对象。我们使用 current()
方法开始执行生成器。在运行过程中,上述函数将打印以下输出:
ReflectionGenerator
File: /path/to/file.php
Line: 4
Function: coroutine
上述输出告诉我们,当前正在执行协程的生成器是 coroutine()
函数,其位于 /path/to/file.php
中的第 4 行。