如何立即结束堆栈执行(PHP)


How to end stack execution at once (PHP)?

我得到了一个产生错误的概率为50:50的代码。这一切都是在一个类对象中完成的。对象中的任何方法都可能产生错误。我如何才能让方法堆栈深处的某个函数产生错误,从而将其返回到运行的第一个函数?

像这样:1.调用功能12.function1调用function23.function2调用function34.函数3产生错误,并将错误定义功能权限1

我知道Exceptions是正确的(用try-catch块包装函数),但我还不能让它在3函数深度堆栈中捕获Exception。我该怎么做?

你试过什么?其实很简单:

<?php
function function1( ) {
    try {
        function2( );
    }
    catch( Exception $e ) {
        // Exception from function4 bubbles up.
    }
}
function function2( ) {
    function3( );
}
function function3( ) {
    function4( );
}
function function4( ) {
    throw new Exception( );
}

异常是正确的方法。CatchException(普通类)是一种糟糕的做法。

您应该抛出具体/自定义异常。

看http://php.net/manual/en/spl.exceptions.php并更改您的throw,添加更多特定和具体的例外

避免

 throw new Exception('foo');

取而代之的是

 throw new RuntimeException('foo');

只需在应该捕获异常的级别使用try,并保持其他异常不变。例如:

try{
function1();
}
catch(Exception e){
// bla bla
}

如前所述,异常会传播,直到它们被捕获或崩溃:)。