我找不到可靠的消息来源来确保能够在其中抛出异常__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] 删除。
我来说两句