2011-01-11 145 views
4

我目前正在使用register_shutdown_function()来达到多种目的。一个用于处理致命错误,另一个用于记录在执行期间使用的资源,如时间,存储空间等。register_shutdown_function() - 什么是最佳实践?

目前我注册了两个不同的关闭函数,但是在一次测试中,只有第一次运行,而另一次似乎失败。现在,这可能是由函数本身内部的一些错误触发的,所以我重写了它,但可能是因为使用多个register_shutdown_function调用而导致错误?那么在这里,最好的做法是注册两个不同的函数,或者只是调用一个函数来处理不同的任务?

如果发生致命错误或者是否应该将函数保留在函数本身中,是否也安全(并且有可能)使函数加载错误处理类?

我得到的最后一个问题是,如果有比使用关闭函数更好的方法来处理致命错误?我尝试过使用set_error_handler,但它没有覆盖所有errortypes,所以一些错误不会触发这个。

希望这些问题能够很好地阐明和清晰。我的目标是尽可能保持代码的可靠性,并且我找不到任何正确的答案。

*编辑:找到我的第一个问题的答案,注册几个函数应该没有问题,所以错误必须在函数本身。留下问题以获得答案,以确定是否有更好的方法来处理致命错误。

回答

2

IIRC,如果您有多个注册的关机功能,它们将按注册顺序执行;你不应该有任何退出语句,否则后续的关闭功能将不会运行。这意味着如果您有多个功能而不是单个关机功能,则需要非常小心。但是,如果您将不同的参数传递给不同的函数,那么在设置所有适当的变量之前调用函数(可能是由错误触发)的情况下,应该确保它们都具有默认值。

就我个人而言,我注册了多个功能,为了类似的目的,但我非常小心他们的逻辑和注册的顺序。

这也不是一个好主意,用包括或关闭功能(特别是在一个异常处理程序)类似,以防包括本身引发的异常

+0

感谢马克:)我会避免使用类或者在关机功能中包含任何其他内容。可能是一个意外退出()或死()导致我的问题与第二个功能不执行。已经重写了代码,所以现在它已经100%正常工作。给予你+1正确的答案,覆盖我的问题的主要部分,并给出一个很好的答案:D – Sondre 2011-01-11 12:56:10