代码之家  ›  专栏  ›  技术社区  ›  MonkeyZeus

简单的try/finally与try/catch

  •  4
  • MonkeyZeus  · 技术社区  · 6 年前

    function hello( $var )
    {
        try
        {
            // do something with $var which may or may not throw an exception
            return $var;
        }
        finally
        {
            return $var;
        }
    }
    

    如果将逻辑或处理转换为:

    function hello( $var )
    {
        try
        {
            // do something with $var which may or may not throw an exception
            return $var;
        }
        catch( Exception $e )
        {
            return $var;
        }
    }
    

    请忽略这样一个事实,那就是没有对 $e MCVE .

    此转换的目的是使源代码在PHP5.3中100%兼容,因为 finally{} 是在5.5中引入的,我希望在保持100%逻辑的同时进行最小的必要更改。

    我之所以这么问,是因为我个人使用try/catch/finally块的经验很少,而且我不知道所有的问题。

    有没有更好的方法来实现PHP5.3兼容性?

    1 回复  |  直到 6 年前
        1
  •  4
  •   MonkeyZeus    6 年前

    return 在finally语句中,它将始终在try完成后运行。您的第一个示例(可能是cut down)将使用finally子句返回的结果,而不是try子句。

    $var . 如果你有 $var = $this->throwsException('x'); 这一行就是抛出异常的地方 将在catch子句中未定义。如果 $变量

    $var = false;
    try {
        $var = $this->doSomething();
    } catch (Exception $ex) {
        $var = $ex->getMessage();
    }
    return $var;