diff --git a/phpunit/src/NewObjectCodegenTest.php b/phpunit/src/NewObjectCodegenTest.php index 3289db0e..459174fc 100644 --- a/phpunit/src/NewObjectCodegenTest.php +++ b/phpunit/src/NewObjectCodegenTest.php @@ -70,6 +70,20 @@ final class NewObjectCodegenTest extends \BaseTest ); } + public function testCreateObjectFunctionStorageIsOnlyDeclaredForClassesThatUseIt(): void + { + [, $extension] = $this->compileFixtureAndExtension(); + + self::assertStringNotContainsString( + 'static zend_object* (*create_object_KnownNewObjectCodegen)', + $extension, + ); + self::assertStringContainsString( + 'static zend_object* (*create_object_RuntimeArrayDefaultCodegen)', + $extension, + ); + } + public function testRuntimeArrayDefaultsUseLazyRequestTemplates(): void { [, $extension] = $this->compileFixtureAndExtension(); diff --git a/src/Translator.php b/src/Translator.php index 36b1b087..2baa9489 100644 --- a/src/Translator.php +++ b/src/Translator.php @@ -1200,7 +1200,10 @@ CODE; && !$classDef->trait && !$classDef->enum ) { - $code .= 'static zend_object* (*create_object_' . $classDef->getNamespacedName() . ")(zend_class_entry *class_type);\n"; + if ($classDef->requireCtor) { + $code .= 'static zend_object* (*create_object_' . $classDef->getNamespacedName() + . ")(zend_class_entry *class_type);\n"; + } $code .= 'static zend_object_handlers property_handlers_' . $classDef->getNamespacedName() . ";\n"; } foreach ($classDef->constants as $constant) {