refactor(php): 重构静态变量添加逻辑以支持重复变量检查和返回全局变量名

- 修改 addStaticVar 方法参数,接受 Variable 对象并返回全局变量名
- 在 addStaticVar 中添加重复变量检查和错误报告功能
- 将静态变量处理逻辑集中到 addStaticVar 方法中
- 简化静态变量列表处理代码,直接调用重构后的方法
- 移除重复的变量检查和全局变量添加代码
pull/1/head
韩天峰 5 months ago
parent 17f3ded89a
commit ea34eaaf89
  1. 18
      src/Php/CompilerBase.php

@ -1626,9 +1626,16 @@ class CompilerBase extends \PhpAot\Core\Translator
return $var;
}
protected function addStaticVar(string $name, string $type): void
protected function addStaticVar(Variable $var, string $name, string $type): string
{
if ($this->hasVar($name)) {
$this->fatalError($var, 'Duplicate variable `$' . $var->name . '`');
}
$this->context->staticVars[$name] = $type;
// 静态变量实际上是一个全局变量的引用
$globalVar = $this->escapeStaticVar($name);
$this->addGlobalVar($globalVar, $type);
return $globalVar;
}
protected function hasArgument(string $name): bool
@ -3600,15 +3607,8 @@ class CompilerBase extends \PhpAot\Core\Translator
$list = [];
foreach ($v->vars as $var) {
$varName = $this->escapeVarName($var->var->name);
if ($this->hasVar($varName)) {
$this->error('Duplicate variable `$' . $var->var->name . '`');
}
$type = $var->default ? $this->detectExprType($var->default) : self::TYPE_VAR;
$this->addStaticVar($varName, $type);
// 静态变量实际上是一个全局变量的引用
$globalVar = $this->escapeStaticVar($varName);
$this->addGlobalVar($globalVar, $type);
$globalVar = $this->addStaticVar($var->var, $varName, $type);
$list[] = self::TYPE_VAR . ' &' . $varName . ' = ' . $this->escapeGlobalVar($globalVar) . ';';
if ($var->default) {

Loading…
Cancel
Save