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 {