My script has the following code:
set_error_handler(function(int $severity, string $message, string $filename, int $lineNumber) : void {
throw new ErrorException($message, 0, $severity, $filename, $lineNumber);
});
function test() : string {
return $test;
}
test();
Running the script on PHP 7.3.11 (on macOS 10.15.7) works as expected and shows the following:
Fatal error: Uncaught ErrorException: Undefined variable: test in .../index.php:9 Stack trace:
#0 .../index.php(9): {closure}(8, 'Undefined varia...', '...', 9, Array)
#1 .../index.php(12): test()
#2 {main}
Next TypeError: Return value of test() must be of the type string, null returned in .../index.php:9 Stack trace:
#0 .../index.php(12): test()
#1 {main} thrown in .../index.php on line 9
But on PHP-8 (php:8.0.0rc1-apache
docker image), it gets stuck on a loop and nothing is displayed.
Removing the set_error_handler
works though
Warning: Undefined variable $test in .../index.php on line 9
Fatal error: Uncaught TypeError: test(): Return value must be of type string, null returned in .../index.php:9
Stack trace:
#0 .../index.php(12): test()
#1 {main} thrown in .../index.php on line 9
Is this a bug, or did something change in the new version? I tried it on PHP CLI btw.
As pointed out in the comments, it was indeed a bug and has been resolved in the 2nd release candidate (PHP-8.0.0 RC2).