Php 在API包装器中引发异常后,如何运行清理?

Php 在API包装器中引发异常后,如何运行清理?,php,Php,目前,我正在构造函数中运行curl_init(),在析构函数中运行curl_close()。如果一个方法抛出异常,析构函数将永远不会被调用,因此cURL会话将保持打开状态。我相信,一旦脚本完成执行,会话无论如何都会关闭,因此在这种情况下这并不十分重要,但是假设,如果我在抛出异常后需要对象清理自己,那么处理这个问题的最佳方法是什么?我考虑过将有问题的对象传递给一个自定义异常类,但这似乎有点过头了。提前感谢您的任何意见。可能有更好的解决方案,但我添加了 register_shutdown_funct

目前,我正在构造函数中运行curl_init(),在析构函数中运行curl_close()。如果一个方法抛出异常,析构函数将永远不会被调用,因此cURL会话将保持打开状态。我相信,一旦脚本完成执行,会话无论如何都会关闭,因此在这种情况下这并不十分重要,但是假设,如果我在抛出异常后需要对象清理自己,那么处理这个问题的最佳方法是什么?我考虑过将有问题的对象传递给一个自定义异常类,但这似乎有点过头了。提前感谢您的任何意见。

可能有更好的解决方案,但我添加了

register_shutdown_function(array($this, 'cleanup'));

。。。并将析构函数替换为cleanup方法,该方法始终运行,而析构函数仅在未引发异常时运行

自定义异常类从来都不是多余的。他们是本着面向对象的精神,这很公平。那么,当对象抛出异常时,它会将self传递给自定义异常类吗?我想我还没有见过用PHP实现这一点。