在析构函数方法中引发异常

剧烈的

我找不到可靠的消息来源来确保能够在其中抛出异常__destruct()

这就是PHP文档所说的

尝试从析构函数中引发异常(在脚本终止时调用)会导致致命错误。

但是当我测试它

class A 
{
    public function __destruct()
    {
       throw new \Exception();
    }
}

try {
    $a = new A();

} catch(\Exception $x) {
    var_dump($x);
}

看来这是不正确的。我通常会抛出并捕获异常。那么,为什么医生得到这一行?

在马克·贝克回答后编辑:

它确实有效,可以从析构函数中抛出并捕获异常。我仍然不确定文件为什么放在那儿。

马克·贝克

在脚本的任何地方都不会调用析构函数,因此您的try / catch块不会捕获任何内容。如果您unset($x)在try / catch块中,则将引发异常并适当地捕获它。

class A {
    public function __destruct() {
       throw new \Exception();
    }
}

try {
    $a = new A();
    unset($a);
} catch(\Exception $x) {
    var_dump($x);
}

否则,脚本终止时,PHP会引发异常,但这在try / catch块之外

编辑

如果您的对象没有被手动销毁,脚本终止会抛出异常,因为您无法将try / catch包裹在破坏对象的PHP内部终止处理中,因此无法捕获该异常。这就是导致致命错误的原因

致命错误:未捕获的异常

这就是文档警告您的内容

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档