From 3bd95121ded0475bc7aedc5c5f7c71cc59c5a3e8 Mon Sep 17 00:00:00 2001 From: tianfenghan Date: Tue, 27 Jan 2026 12:54:18 +0800 Subject: [PATCH] =?UTF-8?q?refactor(php):=20=E4=BC=98=E5=8C=96=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E5=99=A8=E4=B8=AD=E7=9A=84=E8=BF=94=E5=9B=9E=E5=80=BC?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=A4=84=E7=90=86=E5=92=8C=E8=B5=8B=E5=80=BC?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 当函数存在多种返回值类型时统一修改为 var 类型表示 any - 重构位移和异或赋值操作的解析逻辑,使用通用的 parseAssignOp 方法 - 简化代码结构,提高类型判断和表达式转换的一致性 --- src/Php/CompilerBase.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Php/CompilerBase.php b/src/Php/CompilerBase.php index 21e5046c..a150343a 100644 --- a/src/Php/CompilerBase.php +++ b/src/Php/CompilerBase.php @@ -993,6 +993,9 @@ class CompilerBase extends \PhpAot\Core\Translator // 函数定义时没有声明返回值,但函数体中有返回值,修改为实际的返回值类型 if ($this->getReturnType() === 'void') { $this->resetReturnType($type); + } elseif ($this->getReturnType() !== self::TYPE_VAR and $this->getReturnType() !== $type) { + // 返回值类型不一致,说明存在多种类型的返回值,修改为 var 表示 any + $this->resetReturnType(self::TYPE_VAR); } $exprCode = $this->convertExprType($expr, $this->getReturnType(), $type); // return 如果使用了 Indirect 语句,可能会导致变量提前析构,出现悬空指针 @@ -2138,14 +2141,12 @@ class CompilerBase extends \PhpAot\Core\Translator protected function parseAssignOpShiftRight(Node $node): string { - $var = $this->parseIdentifier($node->var); - return $var . ' >>= ' . $this->parseIdentifier($node->expr); + return $this->parseAssignOp($node, '>>='); } protected function parseAssignOpBitwiseXor(Node $node): string { - $var = $this->parseIdentifier($node->var); - return $var . ' ^= ' . $this->parseIdentifier($node->expr); + return $this->parseAssignOp($node, '^='); } protected function parseMagicConst(MagicConst $expr): string