|
|
|
@ -331,6 +331,12 @@ trait AssignOpTrait |
|
|
|
// 变量第一次被赋值,确定其类型,由于 PHP 的变量作用域是 function 级的,在 for/while 块中声明的变量,可以在块外使用 |
|
|
|
// 变量第一次被赋值,确定其类型,由于 PHP 的变量作用域是 function 级的,在 for/while 块中声明的变量,可以在块外使用 |
|
|
|
if (!$this->hasVar($var)) { |
|
|
|
if (!$this->hasVar($var)) { |
|
|
|
$finalVarType = $this->getNormalAssignType($type); |
|
|
|
$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; |
|
|
|
$finalVarType = $this->isNativeType($finalVarType) ? $this->getNativeType($finalVarType) : $finalVarType; |
|
|
|
$this->addLocalVar($var, $finalVarType); |
|
|
|
$this->addLocalVar($var, $finalVarType); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
|