我目前正在使用register_shutdown_function()用于多种用途。一种用途是用于处理致命错误,另一种用于记录执行期间使用的资源,如时间,内存等。
目前我注册了两个不同的关机功能,但是在一次测试中,只有第一次运行而另一次运行似乎失败。现在这可以由函数本身中的一些错误触发,所以我重写了它,但是可能是因为使用了几个register_shutdown_function调用而导致错误?那么这里最好的做法是注册两个不同的函数,还是只调用一个处理不同任务的函数?
如果发生致命错误或者我应该将功能保留在函数本身内,是否安全(并且可能)使函数加载一个类以进行错误处理?
我得到的最后一个问题是,是否有比使用关机功能更好的方法来处理致命错误?我尝试使用set_error_handler,但它并未涵盖所有错误类型,因此某些错误不会触发此错误。
希望这些问题得到很好的阐述和明确。我的目标是尽可能保持代码的稳定性,我找不到任何问题的正确答案。
*编辑:找到第一个问题的答案,注册几个函数应该没问题,所以错误必须在函数本身内。提出问题以获得是否有更好的方法来处理致命错误的答案。
答案 0 :(得分:2)
IIRC,如果您注册了多个关闭功能,它们将按照注册顺序执行;并且你永远不应该有任何退出语句,否则将不会运行后续的关闭函数。这意味着如果你有多个功能而不是一个关机功能,你需要非常小心。
但是,如果您将不同的参数传递给不同的函数,那么在设置所有适当的变量之前,如果函数被调用(可能由错误触发),则应确保它们具有默认值。 / p>
就个人而言,我注册了多个功能,出于与自己类似的目的;但我对他们内部的逻辑以及注册顺序非常谨慎。
在关闭函数中使用包含或类似函数(特别是在一个是异常处理程序的情况下),如果包含本身触发异常,也不是一个好主意