以下代码按预期工作:抛出 ErrorException 并为由生成的致命错误调用关闭函数require
register_shutdown_function(function() {
echo "anyway, hello world\n";
});
set_error_handler(function($severity, $message, $file, $line) {
throw new ErrorException($message, 0, $severity, $file, $line);
});
set_exception_handler(function($exception) {
echo $exception->getMessage().PHP_EOL;
});
require "unavailable_file";
输出:
require(unavailable_file):无法打开流:没有这样的文件或目录
无论如何,你好世界
但是命名参数产生的致命错误无法调用异常处理程序和关闭函数
// replacing require in the previous code with the following
function foo() {}
foo(...[], bar: "baz");
输出:
致命错误:无法组合命名参数和参数解包
将它们全部结合起来也没有按预期工作,并且没有捕获到ErrorException
fromrequire
// ...
require "unavailable_file";
function foo() {}
foo(...[], bar: "baz");
输出:
致命错误:无法组合命名参数和参数解包
那么这是另一个错误还是我在这里遗漏了什么?
PS: PHP版本为8.0.0RC2(cli)