[php-src] Issue #18714: Opcache does not handle class hoisting with @opcache_compile_file
| From: | zavierboyd | Date: | Sat, 31 May 2025 01:25:08 +0000 |
| Subject: | [php-src] Issue #18714: Opcache does not handle class hoisting with @opcache_compile_file | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-250189@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/18714
Author: zavierboyd
### Description
The following code:
```php
// test.php
<?php
$x = new HelloWorld();
class HelloWorld {}
```
```php
// exec.php
<?php
@opcache_compile_file(__DIR__.'/test.php');
require_once __DIR__.'/test.php';
```
When I ran
php exec.php it
Resulted in this output:
```
[30-May-2025 08:10:33 UTC] PHP Fatal error: Uncaught Error: Class "HelloWorld" not found
in /usr/src/wordpress/wp-includes/SimplePie/test.php:3
Stack trace:
#0 /usr/src/wordpress/wp-includes/SimplePie/exec.php(3): require_once()
#1 {main}
thrown in /usr/src/wordpress/wp-includes/SimplePie/test.php on line 3
```
But I expected this output instead:
```
```
empty as it does not return anything
When just running test.php it runs successfully.
This causes an error in Wordpress file /usr/src/wordpress/wp-includes/SimplePie/autoloader.php when
we use Opcache preloading preventing it from working properly.
### PHP Version
```plain
PHP 8.1.32 (cli) (built: Apr 29 2025 20:07:59) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.32, Copyright (c) Zend Technologies
with Zend OPcache v8.1.32, Copyright (c), by Zend Technologies
```
### Operating System
_No response_