php一个方法中会抛出异常,php – 在析构函数方法中抛出异常

我找不到可靠的源来确保我能够在__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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值