From 5650b71dd384c0cb4895d61013865974ac74bfa2 Mon Sep 17 00:00:00 2001 From: tianfenghan Date: Wed, 25 Mar 2026 12:02:01 +0800 Subject: [PATCH] =?UTF-8?q?fix(php):=20=E4=BF=AE=E5=A4=8D=E9=97=AD?= =?UTF-8?q?=E5=8C=85=E5=8F=98=E9=87=8F=E6=8D=95=E8=8E=B7=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加对已使用变量的检查以避免重复捕获 - 将uses数组改为关联数组以支持变量名索引 - 在处理完所有变量后重新索引uses数组 - 确保不会对相同变量名创建多个ClosureUse节点 --- src/Php/CompilerBase.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Php/CompilerBase.php b/src/Php/CompilerBase.php index 3400e537..34b6a5ed 100644 --- a/src/Php/CompilerBase.php +++ b/src/Php/CompilerBase.php @@ -4316,11 +4316,15 @@ class CompilerBase extends \PhpAot\Core\Translator } foreach ($vars as $var) { - if ($var->name === 'this' or !$this->hasLocalVar($var->name) or isset($params[$var->name])) { + if ($var->name === 'this' + or !$this->hasLocalVar($var->name) + or isset($params[$var->name]) + or isset($uses[$var->name])) { continue; } - $uses[] = new Node\ClosureUse($var); + $uses[$var->name] = new Node\ClosureUse($var); } + $uses = array_values($uses); $cb = function () use ($expr) { $code = $this->parseExpr($expr->expr);