Content · Web Development · PHP

PHP ReflectionGenerator::getTrace() Method: Usage and Examples

Reports generator execution frames, including delegated yield from chains.

1 views Published Oct 17, 2026 Updated Oct 17, 2026 admin

When building tools that inspect PHP code, ReflectionGenerator::getTrace() helps answer a focused question: reports generator execution frames, including delegated yield from chains.

Reflection is useful in framework tooling, dependency injection, testing, code inspection and debugging.

What Is ReflectionGenerator::getTrace()?


Reports generator execution frames, including delegated yield from chains.

Its method signature is:

public function getTrace(int $options = ...): array

Parameters:

  • $options — Flags controlling the requested operation May be omitted.

Return value: array

Example 1: Inspect the basic behavior


Start with a self-contained PHP declaration and inspect the method result.

<?php

declare(strict_types=1);

function makeSequence(): Generator {
    yield "first" => 10;
    yield from ["next" => 20];
}
$generator = makeSequence();
$generator->rewind();
$generatorReflection = new ReflectionGenerator($generator);

$result = $generatorReflection->getTrace();
echo count($result) . " frame(s)";

Output:

1 frame(s)

Explanation: Reports generator execution frames, including delegated yield from chains.

Example 2: Compare a second case


Next, change the reflected declaration or parameter to observe a related situation.

<?php

declare(strict_types=1);

function makeSequence(): Generator {
    yield "first" => 11;
    yield from ["next" => 21];
}
$generator = makeSequence();
$generator->rewind();
$generatorReflection = new ReflectionGenerator($generator);

$result = $generatorReflection->getTrace();
echo count($result) . " frame(s)";

// Check the returned value type before using the result.
echo "\nResult type: " . get_debug_type($result);

Output:

1 frame(s)
Result type: array

Explanation: The trace changes with the generator's current suspension point.

Practical Example: Apply the operation in context


This final case shows how the same API can be used when inspecting application definitions.

<?php

declare(strict_types=1);

function makeSequence(): Generator {
    yield "first" => 12;
    yield from ["next" => 22];
}
$generator = makeSequence();
$generator->rewind();
$generatorReflection = new ReflectionGenerator($generator);

$result = $generatorReflection->getTrace();
echo count($result) . " frame(s)";

// Use the reflection result in a simple decision.
if (is_bool($result)) {
    echo "\nStatus: " . ($result ? "yes" : "no");
} elseif (is_array($result)) {
    echo "\nEntries: " . count($result);
} elseif ($result === null) {
    echo "\nNo value returned";
} else {
    echo "\nReflection result available";
}

Output:

1 frame(s)
Entries: 1

Explanation: getExecutingLine reports one source location.

Important Behavior and Edge Cases


  • The trace changes with the generator's current suspension point.
  • getExecutingLine reports one source location.
  • Reflection describes declarations and runtime state; requesting metadata does not automatically validate or sanitize application input.

Comparison With Related Approaches


ApproachWhen to Use It
ReflectionGenerator::getTrace()Reports generator execution frames, including delegated yield from chains.
Related APIgetExecutingLine reports one source location.

Common Beginner Mistakes


MistakeCorrect Approach
Ignoring this condition: The trace changes with the generator's current suspension point.Handle the specific limitation: The trace changes with the generator's current suspension point.
Confusing this method with Related APIgetExecutingLine reports one source location.

Key Takeaways


  • Reports generator execution frames, including delegated yield from chains.
  • The trace changes with the generator's current suspension point.
  • getExecutingLine reports one source location.

Use ReflectionGenerator::getTrace() when you need the precise metadata or behavior demonstrated above. Keep the target declaration and relevant PHP version in mind when adapting the examples.

Share this resourceSend this page to someone who may find it useful.