From d3f5641a597ab096a075c79b6be8d9799856e0fe Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 23 Jul 2026 08:06:09 +0200 Subject: [PATCH] Iterate in collectInterfaces() --- src/Reflection/ClassReflection.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Reflection/ClassReflection.php b/src/Reflection/ClassReflection.php index 27e6f65293..9bc0d512c3 100644 --- a/src/Reflection/ClassReflection.php +++ b/src/Reflection/ClassReflection.php @@ -62,6 +62,7 @@ use function array_key_exists; use function array_map; use function array_merge; +use function array_pop; use function array_shift; use function array_unique; use function array_values; @@ -1123,10 +1124,16 @@ public function getInterfaces(): array private function collectInterfaces(ClassReflection $interface): array { $interfaces = []; - foreach ($interface->getImmediateInterfaces() as $immediateInterface) { - $interfaces[$immediateInterface->getName()] = $immediateInterface; - foreach ($this->collectInterfaces($immediateInterface) as $immediateInterfaceInterface) { - $interfaces[$immediateInterfaceInterface->getName()] = $immediateInterfaceInterface; + $queue = [$interface]; + while ($queue !== []) { + $current = array_pop($queue); + foreach ($current->getImmediateInterfaces() as $immediateInterface) { + $name = $immediateInterface->getName(); + if (array_key_exists($name, $interfaces)) { + continue; + } + $interfaces[$name] = $immediateInterface; + $queue[] = $immediateInterface; } }