【问题标题】:Handling interface fatal error处理接口致命错误
【发布时间】:2013-04-09 22:51:00
【问题描述】:

当实现接口的类不包含请求的方法时,如何自定义错误消息?

其实我明白了:

Fatal error: Interface function X cannot contain body in Y on line Z

【问题讨论】:

  • 我研究了这个解决方法:@include_once $class OR die(); //sorry for the dirty @ if(error_get_last()) echo "<div class='error'><p>The module named $class_name is not correctly implemented.</p></div>"; else { ... } 因为这个块在一个循环中,它显示了哪些类缺少接口方法。我知道这并不完美,但这是我找到的唯一解决方案。

标签: php oop interface error-handling fatal-error


【解决方案1】:

假设您无法在错误发生之前拦截错误并引发异常或触发自定义错误,您唯一的机会是尝试使用 register_shutdown_function 并尝试捕获致命错误并解析 error_get_last()['message'] 出现的字符串 if @ 987654323@ 是一个致命错误。

注意:作为关闭函数传递的注册回调在脚本成功结束时也会被调用,因此您必须检查error_get_last是否不为空。


显然you cannot 甚至走寄存器关闭函数路径,因此您所要求的在 PHP 中是不可能的。

【讨论】:

  • 你无法捕捉到这个错误,它发生在解析/编译时而不是运行时。关闭功能将无法工作,因为脚本永远不会被执行。
  • @nickb 所有致命错误can be handled。无论您在关闭函数中做什么,脚本都会退出这一事实,您对此无能为力。
  • 不,不是所有的致命错误都可以处理。如果这是真的,this script would print shutdown,但事实并非如此。
  • @nickb,显然你是对的,我一直认为你可以。
  • 您可以针对某些运行时致命异常。例如,您的example works,因为它是在运行时生成的。
猜你喜欢
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2013-08-13
  • 1970-01-01
  • 2013-11-24
  • 2016-05-26
相关资源
最近更新 更多