From e79ec2cf73aacf7910c5209e751eb2bf12556906 Mon Sep 17 00:00:00 2001 From: yangweijie <917647288@qq.com> Date: Wed, 5 Aug 2026 14:02:23 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=AF=91=E6=8A=A5=E9=94=99=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Parser/AssignOpTrait.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Parser/AssignOpTrait.php b/src/Parser/AssignOpTrait.php index f15aec98..dc894fb9 100644 --- a/src/Parser/AssignOpTrait.php +++ b/src/Parser/AssignOpTrait.php @@ -331,6 +331,12 @@ trait AssignOpTrait // 变量第一次被赋值,确定其类型,由于 PHP 的变量作用域是 function 级的,在 for/while 块中声明的变量,可以在块外使用 if (!$this->hasVar($var)) { $finalVarType = $this->getNormalAssignType($type); + // A variable that is later reassigned an incompatible type must be + // declared as a runtime variant (php::Var) up front, otherwise the + // generated C++ would mismatch the scalar declaration. + if (isset($this->variantVars[$var])) { + $finalVarType = Type::VAR; + } $finalVarType = $this->isNativeType($finalVarType) ? $this->getNativeType($finalVarType) : $finalVarType; $this->addLocalVar($var, $finalVarType); } else {