Php 向特定方法发送未捕获的异常

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()方法的自定义异常类,该方法以一种非常漂亮的方式显示异常。
在一些致命错误中,我未捕获异常,因此程序处于中间状态,但我希望使用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新手,来自过程。所以现在我比以前更迷路了…好吧,现在我们又在这里了。你能给我解释一下静态方法调用我的方法吗?谢谢