Php 向特定方法发送未捕获的异常
我有一个带有show()方法的自定义异常类,该方法以一种非常漂亮的方式显示异常。Php 向特定方法发送未捕获的异常,php,oop,exception,exception-handling,Php,Oop,Exception,Exception Handling,我有一个带有show()方法的自定义异常类,该方法以一种非常漂亮的方式显示异常。 在一些致命错误中,我未捕获异常,因此程序处于中间状态,但我希望使用show方法显示这些异常。 这能做到吗 class MyException extends Exception { public $e; public function _contruct($message, $code = 0) { parent::_construct($message, $code);
在一些致命错误中,我未捕获异常,因此程序处于中间状态,但我希望使用show方法显示这些异常。
这能做到吗
class MyException extends Exception
{
public $e;
public function _contruct($message, $code = 0)
{
parent::_construct($message, $code);
}
public function show()
{
if(!defined('DEBUG')) define('DEBUG', FALSE);
p("Error: " . $this->getMessage());
if(DEBUG)
{
p('Stack trace');
p($this->getFile() . ' (' . $this->getLine() . ')');
pre(get_dump($this->getTraceAsString()));
}
}
}
解决方案
class MyException extends Exception
{
public $e;
public function _contruct($message, $code = 0)
{
parent::_construct($message, $code);
}
public function show()
{
MyException::realShow($this);
}
static function realShow($e)
{
if(!defined('DEBUG')) define('DEBUG', FALSE);
p("Error: " . $e->getMessage());
if(DEBUG)
{
p('Stack trace');
p($e->getFile() . ' (' . $e->getLine() . ')');
pre(get_dump($e->getTraceAsString()));
}
}
}
如果有人有更好的方法,我会全神贯注。当然,您可以使用以下函数设置未捕获的异常处理程序函数:
function exception_handler($ex) {
//$ex will be the thrown Exception object
}
set_exception_handler('exception_handler');
从文档中:
如果在try/catch块中未捕获异常,则设置默认异常处理程序。调用异常处理程序后,执行将停止
此外,您不需要重写构造函数,如果未重写父类的构造函数,则会自动调用它。您不应该在PHP中使用异常系统 如文件所述: PHP异常系统甚至在抛出对象之前就对每个对象造成一定的开销。这需要细致的内存处理,仅建议用于系统关键异常(您或用户无法控制)。对于更常见的情况,最好在自定义非异常对象上使用trigger_error
@disintegrator我建议创建一个
static
helper方法,该方法由show
实例方法调用,这样,您就可以执行MyException::show
。我不喜欢ad,我是oop新手,来自过程。所以现在我比以前更迷路了…好吧,现在我们又在这里了。你能给我解释一下静态方法调用我的方法吗?谢谢