如何绕过低优先级代码行而致命错误?

时间:2011-10-11 10:32:41

标签: php

示例:

假设我有一个日志记录类,并且我在整个代码中使用了它的全局变量实例。

$logger = new Logger();

function correctWorking()
{
   global $logger;
   $logger->log("this is correct");
}

function failing()
{
   $logger->log("this is fatal error");  /* here fatal error comes, :  Call to a member  
                                          function log() on a non-object in ...
                                         */
   moreImportantWork();
}

请不要建议更好的编码实践,我正在研究它们。 我的主要好奇是,如果发生错误,如何绕过致命错误行, 因为日志记录不像保持应用程序运行那么重要。

4 个答案:

答案 0 :(得分:2)

你不能。

您可以像@$logger->log("this is fatal error");一样抑制错误输出,但是:

  • 这是草率的编码;
  • 脚本仍然终止。

相反,修复致命错误。

答案 1 :(得分:1)

你不能用致命错误做到这一点。在较低级别的错误上,您可以编写自己的error_handler,从而创建异常。然后,您可以使用try { ... } catch { /* do nothing here */ }来避免脚本终止。

答案 2 :(得分:0)

您需要将global $logger;放入failing()功能中,这似乎是您的问题。

答案 3 :(得分:-2)

如果我理解你是正确的,你想跳过代码中的错误并继续执行脚本? 您可以使用@运算符来抑制致命错误

@$logger->log("this is fatal error");

了解更多示例http://de3.php.net/manual/en/language.operators.errorcontrol.php