我找不到可靠的源来确保我能够在__destruct()中抛出异常.
这就是php文档所说的
Attempting to throw an exception from a destructor (called in the time of script termination) causes a fatal error.
但是当我测试它时
class A
{
public function __destruct()
{
throw new \Exception();
}
}
try {
$a = new A();
} catch(\Exception $x) {
var_dump($x);
}
看来这不是真的.我通常抛出并捕获异常.那么,为什么文档得到这条线?
马克·贝克回答后编辑:
它实际上工作,异常可以抛出并从析构函数中捕获.我仍然不确定为什么文档存在.
解决方法:
析构函数不会在脚本中的任何位置被调用,因此您的try / catch块不会捕获任何内容.如果在try / catch块中取消设置($x),则会抛出异常并正常捕获.
class A {
public function __destruct() {
throw new \Exception();
}
}
try {
$a = new A();
unset($a);
} catch(\Exception $x) {
var_dump($x);
}
否则,PHP会在脚本终止时抛出异常,但这不在try / catch块之外
编辑
如果你的对象没有被手动销毁,那么在脚本终止时引发的异常无法被捕获,因为你无法在PHP的内部终止处理中包装try / catch来破坏对象;这就是导致致命错误的原因
Fatal Error: Uncaught Exception
所以这就是文档警告你的内容
标签:php,destructor,exception
来源: https://codeday.me/bug/20190823/1698260.html