diff --git a/src/Php/CompilerBase.php b/src/Php/CompilerBase.php index 50e06312..f4d5ea3d 100644 --- a/src/Php/CompilerBase.php +++ b/src/Php/CompilerBase.php @@ -3071,6 +3071,11 @@ class CompilerBase extends \PhpAot\Core\Translator $classDef = $expr->class; $className = $this->genAnonClassName(); $classDef->name = new Node\Identifier($className); + // 继承父类可能是 use 的名称,需要转换成全限定名称 + if ($classDef->extends !== null) { + $parentClass = $this->getNamespacedClassName($classDef->extends->toString()); + $classDef->extends = new Node\Name\FullyQualified($parentClass); + } $this->context->beforeStmtLines[] = 'static THREAD_LOCAL bool ' . $className . '_defined = false;'; $classCode = $this->genEmbeddedCode($classDef); $this->addConstData($className . '_code', $classCode); diff --git a/tests/aot/anonymous-classes.phpt b/tests/aot/anon_class/001.phpt similarity index 100% rename from tests/aot/anonymous-classes.phpt rename to tests/aot/anon_class/001.phpt diff --git a/tests/aot/anon_class/002.phpt b/tests/aot/anon_class/002.phpt new file mode 100644 index 00000000..fccb6324 --- /dev/null +++ b/tests/aot/anon_class/002.phpt @@ -0,0 +1,35 @@ +--TEST-- +Anonymous Classes - Runtime class definition +--FILE-- +greeting = $greeting; + } + + public function greet() { + return $this->greeting; + } + } +} + + +namespace { +use TestApp\Greeter; +function main() { + $class = new class("Hello") extends Greeter { + public function greet() { + return "{$this->greeting} from anonymous class"; + } + }; + echo $class->greet(), "\n"; +} +} + +?> +--EXPECT-- +Hello from anonymous class