无法将错误处理程序设置为在 PHP-8 中抛出 ErrorException
Cannot set error-handler to throw ErrorException in PHP-8
我的脚本有以下代码:
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();
运行 PHP 7.3.11(在 macOS 10.15.7 上)上的脚本按预期工作并显示以下内容:
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
但是在 PHP-8(php:8.0.0rc1-apache
docker 图像上),它卡在一个循环中,没有任何显示。
删除 set_error_handler
仍然有效
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
这是一个错误,还是新版本中发生了一些变化?我在 PHP CLI btw 上试过了。
正如评论中所指出的,这确实是一个错误,并已在第二个候选版本 (PHP-8.0.0 RC2) 中得到解决。
我的脚本有以下代码:
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();
运行 PHP 7.3.11(在 macOS 10.15.7 上)上的脚本按预期工作并显示以下内容:
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
但是在 PHP-8(php:8.0.0rc1-apache
docker 图像上),它卡在一个循环中,没有任何显示。
删除 set_error_handler
仍然有效
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
这是一个错误,还是新版本中发生了一些变化?我在 PHP CLI btw 上试过了。
正如评论中所指出的,这确实是一个错误,并已在第二个候选版本 (PHP-8.0.0 RC2) 中得到解决。